{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Paddle2.0基于AUTOENCODER实现异常时序检测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.8/site-packages/ipykernel/ipkernel.py:287: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
      "  and should_run_async(code)\n"
     ]
    }
   ],
   "source": [
    "#导入模块\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")  # 忽略版本问题\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.0\n"
     ]
    }
   ],
   "source": [
    "import paddle\n",
    "import paddle.nn.functional as F\n",
    "print(paddle.__version__)\n",
    "\n",
    "# 启动动态图训练模式\n",
    "paddle.disable_static()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 加载数据集\n",
    "\n",
    "* 我们将使用纽伦塔异常基准(NAB)数据集。它提供人工时间序列数据，包含标记的异常行为周期。\n",
    "\n",
    "* 该数据集已经挂载到[AI Studio](https://aistudio.baidu.com/aistudio/datasetdetail/55385)，相应的项目也已经挂载数据集[基于AUTOENCODER实现异常时序检测](https://aistudio.baidu.com/aistudio/projectdetail/1086283?shared=1)\n",
    "\n",
    "* 我们将使用art_daily_small_noise.csv文件内数据进行训练，并使用art_day_jumpup.csv文件内数据进行测试。\n",
    "\n",
    "* 该数据集的简单性使我们能够有效地演示异常检测。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                         value\n",
      "timestamp                     \n",
      "2014-04-01 00:00:00  18.324919\n",
      "2014-04-01 00:05:00  21.970327\n",
      "2014-04-01 00:10:00  18.624806\n",
      "2014-04-01 00:15:00  21.953684\n",
      "2014-04-01 00:20:00  21.909120\n",
      "                         value\n",
      "timestamp                     \n",
      "2014-04-01 00:00:00  19.761252\n",
      "2014-04-01 00:05:00  20.500833\n",
      "2014-04-01 00:10:00  19.961641\n",
      "2014-04-01 00:15:00  21.490266\n",
      "2014-04-01 00:20:00  20.187739\n"
     ]
    }
   ],
   "source": [
    "#正常数据预览\n",
    "df_small_noise_path = 'data/artificialNoAnomaly/art_daily_small_noise.csv'\n",
    "df_small_noise = pd.read_csv(\n",
    "    df_small_noise_path, parse_dates=True, index_col=\"timestamp\"\n",
    ")\n",
    "\n",
    "#异常数据预览\n",
    "df_daily_jumpsup_path = 'data/artificialWithAnomaly/art_daily_jumpsup.csv'\n",
    "df_daily_jumpsup = pd.read_csv(\n",
    "    df_daily_jumpsup_path, parse_dates=True, index_col=\"timestamp\"\n",
    ")\n",
    "print(df_small_noise.head())\n",
    "\n",
    "print(df_daily_jumpsup.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>timestamp</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:00:00</th>\n",
       "      <td>18.324919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:05:00</th>\n",
       "      <td>21.970327</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:10:00</th>\n",
       "      <td>18.624806</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:15:00</th>\n",
       "      <td>21.953684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:20:00</th>\n",
       "      <td>21.909120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:35:00</th>\n",
       "      <td>20.211195</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:40:00</th>\n",
       "      <td>20.531041</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:45:00</th>\n",
       "      <td>19.032127</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:50:00</th>\n",
       "      <td>21.798801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:55:00</th>\n",
       "      <td>18.682620</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>4032 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                         value\n",
       "timestamp                     \n",
       "2014-04-01 00:00:00  18.324919\n",
       "2014-04-01 00:05:00  21.970327\n",
       "2014-04-01 00:10:00  18.624806\n",
       "2014-04-01 00:15:00  21.953684\n",
       "2014-04-01 00:20:00  21.909120\n",
       "...                        ...\n",
       "2014-04-14 23:35:00  20.211195\n",
       "2014-04-14 23:40:00  20.531041\n",
       "2014-04-14 23:45:00  19.032127\n",
       "2014-04-14 23:50:00  21.798801\n",
       "2014-04-14 23:55:00  18.682620\n",
       "\n",
       "[4032 rows x 1 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_small_noise"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 4032 entries, 2014-04-01 00:00:00 to 2014-04-14 23:55:00\n",
      "Data columns (total 1 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   value   4032 non-null   float64\n",
      "dtypes: float64(1)\n",
      "memory usage: 63.0 KB\n"
     ]
    }
   ],
   "source": [
    "df_small_noise.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>timestamp</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:00:00</th>\n",
       "      <td>19.761252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:05:00</th>\n",
       "      <td>20.500833</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:10:00</th>\n",
       "      <td>19.961641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:15:00</th>\n",
       "      <td>21.490266</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:20:00</th>\n",
       "      <td>20.187739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:35:00</th>\n",
       "      <td>18.074649</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:40:00</th>\n",
       "      <td>21.002014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:45:00</th>\n",
       "      <td>20.566713</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:50:00</th>\n",
       "      <td>18.254193</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:55:00</th>\n",
       "      <td>21.863147</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>4032 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                         value\n",
       "timestamp                     \n",
       "2014-04-01 00:00:00  19.761252\n",
       "2014-04-01 00:05:00  20.500833\n",
       "2014-04-01 00:10:00  19.961641\n",
       "2014-04-01 00:15:00  21.490266\n",
       "2014-04-01 00:20:00  20.187739\n",
       "...                        ...\n",
       "2014-04-14 23:35:00  18.074649\n",
       "2014-04-14 23:40:00  21.002014\n",
       "2014-04-14 23:45:00  20.566713\n",
       "2014-04-14 23:50:00  18.254193\n",
       "2014-04-14 23:55:00  21.863147\n",
       "\n",
       "[4032 rows x 1 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_daily_jumpsup"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据可视化\n",
    "### 1. 正常的时序数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "df_small_noise.plot(legend=False, ax=ax)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.带有异常数据的时序数据可视化\n",
    "**带有异常的时序数据如下：**\n",
    "\n",
    "训练好模型后，我们将使用以下数据进行测试，并查看数据中的突然跳升是否被检测为异常。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEeCAYAAABxO1VsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAA//UlEQVR4nO2dd3gexbW43yPLFfeOGzK2KaaDMRB6SagBkkACIQQIN/wIkHLDTWJCEtK4kJCEkEogEEho4VJCMb2aDrbBuGDcjbvlIllussr8/tiV9FmWvp2d3fmaz/s8erTf7uzZ2d3ZMzNnzpwRYwyKoihKaVGW7wwoiqIo6aPKXVEUpQRR5a4oilKCqHJXFEUpQVS5K4qilCCq3BVFUUqQ8nxnAKB///6moqIi39lQFEUpKqZMmbLGGDOgrWMFodwrKiqYPHlyvrOhKIpSVIjI4vaOqVlGURSlBFHlriiKUoKoclcURSlBVLkriqKUIKrcFUVRShBV7oqiKCWIKndFUZQSRJW7oig5Y1nVFmYur27+vX7TNk763av86+123bUVRwpiEpOiKDsHR974EgAPXHY4Ex7+kH2G9mLe6o38+D8zuPDw3fKcu9JClbuiKDnn+okfsWjt5nxno6RRs4yiKDln+rLANFPfqMt8+iJSuYvInSKyWkRmtNr/TRGZLSIzReTXGfuvEZF5IvKxiJzsI9OKohQflTW1O+xbun5LHnKyc2BjlrkL+BPwz6YdInI8cBZwgDGmVkQGhvvHAucB+wBDgBdEZA9jTEPaGVcUpbg49PoXsh5vaDR0KJMc5ab0iWy5G2MmAeta7f4GcKMxpjZMszrcfxbwgDGm1hizEJgHjE8xv4qiKIoFrjb3PYCjReQdEXlVRA4N9w8FlmSkWxruUxRFyYq22dPFVbmXA32Bw4HvAQ+KSKx3IyKXichkEZlcWVnpmA1FUQqdN+etoWLCxHxnY6fDVbkvBR4xAe8CjUB/YBkwPCPdsHDfDhhjbjPGjDPGjBswoM2FRBRFKQGe+HBFvrOwU+Kq3P8DHA8gInsAnYA1wOPAeSLSWURGAmOAd1PIp6IoihKDSG8ZEbkfOA7oLyJLgeuAO4E7Q/fIbcBFxhgDzBSRB4FZQD1wpXrKKMrOTTyDrZIWkcrdGHN+O4e+0k7664Hrk2RKUZSdD53OlC46Q1VRFKUEUeWuKIpX1CqTH1S5K4riFbW55wdV7oqieKWhMd852DlR5a4oilfqVLvnBVXuiqJ4RZV7flDlriiKV7bV2yn3YKqMkhaq3BVF8Yq23PODKndFUbyyrUFb5PlAlbuiKF6pszTLKOmiyl1RFK+oWSY/qHJXFMUrA3p0zncWdkpUuSuK4pVPjx2U7yzslKhyVxTFK7Yejjrsmi6q3BVF8Yoq7fygyl1RFK/o5KT8oMpdURSvqGrPD6rcFUVRSpBI5S4id4rI6nC91NbHrhYRIyL9w98iIn8QkXki8qGIHOwj04qiFBHadM8LNi33u4BTWu8UkeHAZ4BPMnafCowJ/y4D/po8i4qiFDNGtXteiFTuxphJwLo2Dt0MfJ/t6+WzgH+agLeB3iKyayo5VRSlKLF2hdQ6IFWcbO4ichawzBgzrdWhocCSjN9Lw32KouykqM7OD+VxTxCRbsAPCUwyzojIZQSmG0aMGJFElKIoBYy2yPODS8t9FDASmCYii4BhwFQRGQwsA4ZnpB0W7tsBY8xtxphxxphxAwYMcMiGoijFgNrc80Ns5W6MmW6MGWiMqTDGVBCYXg42xqwEHge+GnrNHA5UG2NWpJtlRVGKCW255wcbV8j7gbeAPUVkqYhcmiX5U8ACYB5wO3BFKrlUFKVoUd2eHyJt7saY8yOOV2RsG+DK5NlSFKVU2LClrs39i248ndr6Bsb+5FkaGrUKSBudoaooilduevbjHfbt1q8bAJ3LO/DdT+8BqG0+bWJ7yyiKorjy3H8fwxPTlvP5g4flOysljyp3RVFyxh6DenD1Z/bMdzZ2CtQsoyiKUoKoclcURSlBVLkriqKUIKrcFUVRShBV7oqi5ISzDhyS7yzsVKhyVxQlJ/zi7H2zHtcwBemiyl1RlJwg7e1v74CSCFXuiqJ4Y/rS6uZtUS2eU1S5K4rijW//+/3mbVXtuUWVu6Io3lhQual5W03quUWVu6IoOaFRR0xziip3RVFyQqcOqm5yiT5tRVFyQpeOHfKdhZ0KVe6KonjDxkFGdKjVC6rcFUXxRpm6P+YNmzVU7xSR1SIyI2PfTSIyW0Q+FJFHRaR3xrFrRGSeiHwsIid7yreiKEWAqvb8YdNyvws4pdW+54F9jTH7A3OAawBEZCxwHrBPeM5fREQNbYqyk6It9/wRqdyNMZOAda32PWeMqQ9/vg00rZl1FvCAMabWGLMQmAeMTzG/iqIUE6rb80YaNvevAU+H20OBJRnHlob7FEXZCSlT5Z43Eil3EbkWqAfudTj3MhGZLCKTKysrk2RDUZQCJY4njM5xShdn5S4iFwNnABcY0/xalgHDM5INC/ftgDHmNmPMOGPMuAEDBrhmQ1GUIkfN8n5wUu4icgrwfeBMY8zmjEOPA+eJSGcRGQmMAd5Nnk1FUYoRDTmQP8qjEojI/cBxQH8RWQpcR+Ad0xl4Pgzj+bYx5nJjzEwReRCYRWCuudIY0+Ar84qiFDaq2/NHpHI3xpzfxu47sqS/Hrg+SaYURSkNjMaCzBs6Q1VRFG98dn9dNzVfqHJXFMUb40f2zXcWdlpUuSuKUhCoCSddVLkripJX1BPSD6rcFUXxhrbF84cqd0VRlBJElbuiKN65978Oy3cWdjpUuSuK4p1RA7rnOws7HarcFUVRShBV7oqiFAQaqiBdVLkripJXNCqkH1S5K4riDW2N5w9V7oqieEdb57lHlbuiKEoJospdURSlBFHlriiKUoKoclcUpSDQsdd0iVTuInKniKwWkRkZ+/qKyPMiMjf83yfcLyLyBxGZJyIfisjBPjOvKErxIxoX0gs2Lfe7gFNa7ZsAvGiMGQO8GP4GOJVgUewxwGXAX9PJpqIoxYjGaM8fkcrdGDMJWNdq91nA3eH23cDZGfv/aQLeBnqLyK4p5VVRlCJF2+a5x9XmPsgYsyLcXgkMCreHAksy0i0N9ymKoig5JPGAqjHG4DAWIiKXichkEZlcWVmZNBuKoihKBq7KfVWTuSX8vzrcvwwYnpFuWLhvB4wxtxljxhljxg0YMMAxG4qiKEpbuCr3x4GLwu2LgMcy9n819Jo5HKjOMN8oiqK0i9FANKlSHpVARO4HjgP6i8hS4DrgRuBBEbkUWAx8MUz+FHAaMA/YDFziIc+KopQQGnfGD5HK3RhzfjuHTmwjrQGuTJopRVFKA22M5w+doaooin+0dZ5zVLkriqKUIKrcFUVRShBV7oqiKCWIKndFUZQSRJW7oigFgTrWpIsqd0VRvKEKO3+oclcUxTsasz33qHJXFEUpQVS5K4qilCBFq9w3b6vPdxYUoL6hkcZGtayWEk0BvBobDbX1DdQ3NOY5R4oLRancP15Zw9ifPMtjHyxjy7YGfvHkLFZv2Jqa/CemLWfSnEoaGg3PzlzJ/MqNqcmG4KO5fdICXpq9KlW5mRz48+f44q1v8f2HprHXj5/2co2KCRMZfe3TjLv+BZas25yq7KsfnEbFhIksXruJ2voGvvDXN5n6yfpEMqu31FG1eRsTP1xBxYSJVEyYyIatdfziyVms27QtcZ6XrNtMxYSJvPhR8F5/+9zHnPL7STwzozgCo1bW1PLI1KWMvOYpKiZMZPcfPsWeP3qG0dc+TcWEiQWt5Gu21jFl8XrmV26kYsJEbn5+DhUTJnL3m4v44t/eSk0/bKytp7Kmtvn3z56Yyef+8kYqsluzta6Bv7+2gO888D5Vm+OXz8jAYYXEMzNWcPk9U7nm1L0A+PYDH/DtE8dwx+sLueP1hSy68fTE15i1fAPfvP/9No+9dPWx7D6geyLZ59/+NtVb6pr3pZHnTFZUb+GZGSup2lzHu4vW8e6i1iskuvPy7NVcctd7fPjTz9C9U0vRWbdpG0f/+uXE9/LeonWce+tbfGbsIJ6bFSjIGcs2ULO1nimL1/OjR2fw1LePdpZ/wM+e22Hf/j8N9q3dWMvvzzvIWXZjo+HoX78MwKV3T+b1HxzPH1+aB8Dl90zlD+cfxJkHDHGWD/CVv7/DeeOHc8b+28u5+sFpvDV/Da9+/3g6dnBvr53w21eo2dp+j3jd5m0M7NHFWX4USYKMXXXf+7w6p2XRn1tenAvAdY/PBODONxYxIdQbSfj0715lRfVWnvzmUdw2aQGPT1sOwL/eWsSFR1Qkkj1tSRVn/TmoKIb27soBw3vx1PSVAAzs2YUfnrZ3LHlF1XK/9dUFANzw9OzmfS41WjYuv2dKu8dO+O2riWR/7i9vbKfYAW59dT6T5lTyhb++mTie9eyVGzjihpf42ROzdjiWRqzsS+56D4ATf/uqFxe3c299C6BZsQNced9Uzvjj64Df0LAvfLSaugQt09fmrdnu9yetejLfaqfBEIfX563hqvve5/8mL+G0W16jYsJENtXW8/DUpSyv3srzs5L1BLMpdmcsyp2k8GJnr9yQPRsJS+z6TdvY76fPsqI66AGc8cfXmxU7wI8fm5lI/pvz1jQrdoBlVVuaFTvAU9Pj9/6KSrmXl+1YCO5+a3HzdlI7fF1D4w4fZZrU1u+oPG58ejZfvfNdpixezxvz1iaSP2Vx+2aLNM3ilTW1/PGluekJtKTMo3bfWFvPLS+431Nrk8WXb38naZa2Y1tG2fneQx8ya0WgzNLsmfnEd8z2zuUdsh6/bdKCRPIvvfs9P5VfyJf/nr28LF2/JbbMolLuUYy//sVE5y+o3JRSTtxYs7E2OlE7bK1r4NpHZ7R7fEOrHkNSft+GIkzSO5i5vDoyzfoEvbTqzdH3n6Riz2zF+aC9lv8l/3ivedtVfy5as4lTfj8pOmGBjpvXbK2LfHdJO65TP6lKJiAPFJVyj6r9N9a616yfrN3MyTYF3CPvLHRvuUd9nIfdkKzi21rXEJkmSe/g9D+8HpmmqUvswsV3vRuZJknr8rEP/Cl3YwzPzFwZmc41/7e+Op/ZK2vcTi4AJjw8Pd9ZKEiKSrm7dE1s+XBZlTfZAA0Wmu/+d5c4y1+0NnvLZVsbJqE4/ObZjyPTvOdoIrBt8SfpGcxant0mC4W7nsTKFD3BklCgDfeCeT6ufBLx7bqSSLmLyH+LyEwRmSEi94tIFxEZKSLviMg8Efm3iHRKI6NL129O1HKL4pdPfhSZ5uARvZ3lZxuozRVJCtHqmmiTUaVFmrawbfEn6Rm0Nd7RmjUb0x2cb80CR5da+4q5UKsnvxT7wtrH3PSyF7nOyl1EhgLfAsYZY/YFOgDnAb8CbjbGjAbWA5emkdFsg4VpYFP71yfQLkk9GdIgSSFqtPiAbNK0hU2vJhck9aOP4olpbv7um7dFm8TA/6Cldx3qKL8wSk/hkdQsUw50FZFyoBuwAjgBeCg8fjdwdsJrAO6KI02Smjai+NSofl7lJ8Hm8dc3uL2jQni3AB3a8MZKV77bebb2fNfc21YKLu6ENmckfeq+i8+UxcXhkdQaZ+VujFkG/Ab4hECpVwNTgCpjTNPI5lJgaNJMAhTC5DjfLcw35ydzhfSJzYe9td6uhdmaJD2iNPGt3F39uQ/fvW/KOck9Pp+s79Kz2JNN3DdJzDJ9gLOAkcAQYBfglBjnXyYik0VkcmVlZWT6ldX+BlNtKRTzQT7InFDRHtlcMbNRKM+1g2e7xvIqtzJcXmb3maYxGSgbBdLB2hHPGUsyuS2fJDHLnAQsNMZUGmPqgEeAI4HeoZkGYBiwrK2TjTG3GWPGGWPGDRgwIPJiv3luToKspkOhtDBLDdvAY/27d/aajzLPLXff5qedczgVFq7xOz+lztHcmG+SKPdPgMNFpJsETYYTgVnAy8A5YZqLgMeSZbFw8D1gdfI+g/xeoECxrTQvP3Z3r/lwbbnbemvYtsBzj919F6qK2+Bx5igUbwTaJDb3dwgGTqcC00NZtwE/AL4rIvOAfsAdKeSzIDh8pN8Bz767+G2ZFiq2LVqf4QfA3eY+Y1m0Dz24xzexvW3Xx1NrMUFtZ2ba0ujZ04VIoqaEMeY6Y8xexph9jTEXGmNqjTELjDHjjTGjjTHnGmPc59QXGP+e7D7JyAbf/roj++/iVb4rtjZ33y1HV+VeudFu/sUJew10ku8bmzkA4L98Jg3u5Yt+u6QyVSfnFGo/0Yn+3YvzJTTh2ya7e5Erd9+0FZguTZKE47XB9TH6LHc2on2bO5PSo0tRRUZvpqSU++Be/mJN5wLfOm54325e5X/5sBFO59mGlfDdcnQdUC0ULxLfk8iS3KdvTx6fREWcTMKmBPGwoigK5W4zGj56YHdnm2ySaIxpMaxPV+eP07fS+/Uzs6MT4e7Ncv7tbzudZ8u/3lpklc63+nF9Tbb5cl3usFAmkRUqPp/Pqbe8tsO+Y/eI9h60oSiU+/G/eSUyTZm4fzzjfvmC24kpMaRXF8pEnPM/sVUg/+s+O7bNdK6VwF9emW+XMOWP4E9fdl8ZKZOkCymkhevT+ZVF0DaABg8t92tjrv6Ta1q3fD/86WdSv4bPHnVboYqPHJ2O40ZRKHcbenftlGoNO7hnFz49tsU1cVDPzuw1uEdq8puYdt1nePHq4ygTd9vzVfdtH+v7iFH9WHjDafzglO2XFSvQ0CDt0noA0ncDs5/jmM3DU5c2b3//lD3Tyk4z05ZUWaVzVUIvf9z+JMKvH9PiflqIDfwfP7b9xLmeXTqmfo1cLwA/dXFVKnKKXrnfduEh/PH8g+jZtTzVwvfmhBP4bLjm5Yl7DWRE32706eb28a+uad+bolfXjnTt1CFVm+ToAd0REb5x3Cim/Oik5v1pPZ9bzjuwefuQ3fowdtee6QjO4MDhvenWqZyfnblP6rKb+OAnn97u93mHuo0ZZM7eveK40Sy68XQeuvyIHdJ59zZJWX4xzLtYUZXdU+nxq45MJL+2voE/vTyv+fcDlx3O4J5d+OoRu/Gdk8Zww+f3SyS/LQ7ZrU/z9qyfnwwE30NcinMYmKDFC4FyhHQXS3jgssMpKxNO3Xcwlx87im8cO4qv/3Oys6tW61V0XvjusTw+bTnnHjIsjexux0l7D6I8wyujX/fOvHXNCW3a9lz45dn7ctaBQ+lc3oFHpi7lF2fvy6CeXdj9mompVB4/On1vhvbuyqn77QrARZ+qYFDPLlx+z5RUXOX+cP5BvLNgLSfsNZBeXTsysEdnDh7Rh2dmrkzstXH0mP7N2+Mq+vLxL0/hR4/OoH+PzvzV1rQVwRXHjWJrXSMfLq3iWyeOoWpLXXP5cnF1XZ0RDXVgj87sObgHf7vwEMrLyuhUHpSjLx82gvve+cS7q6JL+WlrXth7157EVfdN5ZIjR7L/sN7sP6wXHzr6qv/55Zb3Nul7xzOiXzfe/uGJ26V5cPKS1GbJPnT5ERw0og/rNm/jkiMr6NapnKPH9HdaiKjolPv3Tt6TK48f7U1+r64dOXz3wObVsUNZy4rpCT78txe0RJX7z5VHMnpgd7776T12SJfGp3PafoN32Ldrr66BTT+FK3zl8N0AOGXfwZyyb8u10up5HLvHAMYM2t78lak0k3DiXgM584AhnBn2yADevfYk5ldutFrpKIq9W/VgOpd34KZzD2DqJ+v56yvzU3m/+wzpxen777rdvi7lZVz2rylODgWZrdJJ3z+eLh139AwZt1sf7nvnk/iZxa43kaTktHXPA3p05t//r6XndMhufVjouITm0gyb+Ih+bXub7TmoB8tSWEho0Y2nN2/vYFJ1qfiSZijXXHHcqHaPpfHxPP/fx7QvP4ULtNe9Ssso8/mD2+4NCP5tpmlUHq0V+3byE4o/dGR+ois2v9sUnv+p++5YeSeha6cWZR5VOSRyhXQ/NSs2FZokuPr0ZdEtft9enq4Np6JT7u3daFoPeGDPtn3lhcKNrWGD9wJIcuXblp0a0sv7RyvaDhOQRLzN6lNJejWZLd+fnblP6sHNOmWY8NoTXcgu6pmzit++5sR20xWbM0EaFJ1yz4bPAatcFHD/07v9kcbzKY+YwZk0/z6cHuKELHDp2WTm2ccE2syWb9S9FKQCy8hye5MYRdy/LTsPPHc3ZltcxJeMcs9J48KrdvQoO7xAIRZAG5q61Unz/8S09Abdm7BR7klebaZ7bNMA5w7yE9SsG7bWRcppef6Fp96XrIu2dSfpdc+3sNXnolfsQskod98I6QxI5gv/BTB55dFeFnNlFnDKf8Y5UcrPRX5my9FHyGCbpREL2SxTa7H6V27yX3i6oSiUe6Z3Q77IiVmmmK+Qk+fjsIanjbdGEpu4RZ6SlJ3MlnvUlVwqjzh5K0S7te0YhM9OR27qjvg3UBTKvbtFVLbc2MT9yfad/TQGPKOi4yXt2RRyC9GGyDEDh8eTucRbexVVIT82K4t1ghdvs8CKpOQGnA2vusHx8RSFcs8VPbMoL5EctKwLsIBkks2+LOD9Abl8QN7HGTLktzdNvdlm7SB/07YWs0O+Td7JokKml49M7Fwh/VKojZKiUO62hSpp4e+TJSh/YFP26Y3jv4QkzX62DymN7LcnP4nsOLectHX31U9VtLk/Sf7rMhbSGNK7q7ugdhhv4ftfzOF6myhWZ4Ik8otCuduQZKLCzkAaA8KRk1wSSYd9hqQfo8aGJCWn6Z5/+tmxDI1Qvi6Ng8wzjoqYqevyfuMtIFJ4g4ZWeO51e2/4OZ6XSLmLSG8ReUhEZovIRyJyhIj0FZHnRWRu+L9PtCQ7bjpn/7REtUm2h5iGWSYq3rlPu6AkCIncRLaxqzQq1yhXPBcyP7q3rjnBWU6UfF+tW7sB4eTXGdan/YqpSXy+zUJtsadFpFZJoN2/cnh0MLlC7dgkbbnfAjxjjNkLOAD4CJgAvGiMGQO8GP5OzIAenTl33PCsaZIqx6YgZO3KT1i4H73iU+0ey8WAalKyhX6AZH7QA3tEL/SRtHXUL2IBct825QLUjc33/LcLD2k3TaEqL4BDK4K2Y7Zw3Eny3yVcham9NRKaSPpuP3/w0OzycxlbRkR6AccAdwQXN9uMMVXAWcDdYbK7gbNdr9GC39bLQSN6A3DbV8dlke9+gcNG9uWwkX29LXPXo3MwEPy9k7PHEk9aAD+bxSU1Sc9ABM47tP2Ku+nROw2ohv8vPWpklklA8eW2lp+NNOQfMKxXdNpEsV+iM1mIlVMTf7+o/W8X3Bt+BtilUwcuOXJku2mS1H0DwkbNwSPaN3DkI7bMSKAS+IeIvC8ifxeRXYBBxpimpYFWAqkEhfbZeBg1oDtDenVhUDtxZZrwPmjieIHRg7qz9649s7asJcFKT326deTLh42gXxazUiK7dUS+0pDdp1v6izhkyrfJYxJvn68dlUW55GCCmitx7jnJmERb0SybSOoGbKNcXeUfOSqIQHuB4/rD2Uii3MuBg4G/GmMOAjbRygRjgrfV5m2LyGUiMllEJldWtr8STBx8vkBJcAHvrTsD/bt38urVUG4xWSRR5WfzASUS7z10X/uHWqzWCcTn3zbiq2eQxq1FjZf5JOm72a1ft0gZLj2PJMp9KbDUGPNO+PshAmW/SkR2BQj/r27rZGPMbcaYccaYcQMGZF8Q1qZQJVWOPuWncX60fBvl6NeV09eAm+8ZpM1pncw+vgc88+9kVwD1SrtYu0n7lu+z4eckOYFyN8asBJaISJOh90RgFvA4cFG47yLgMddrZOJzwMpWATh/Zp799K17BkU8wxb8eWsk8vTJkVnGSn588c3YfV+FZ3W38VZK6qro/dknODcbSVdi+iZwr4h0AhYAlxBUGA+KyKXAYuCLCa9hRVJXvKjCndhuF5G/ZArGRJ6di4lAST7+rN1qZ6m5c9/L9nzTePZZ5XuuWgu44d6MbzfmrNcu0NAniZS7MeYDoK1h6vaj5hciVmaZwi7ivl3xIsXnooAnslnbyI9PvBmw7vhS4PEGPL1kIRE+zRqBfM92HwtKOraMb7sX+O2W2pt9fNrt/M6iA1ezQ25svv4H9KIHVH3HxvFV/tNwRfVN1DtMVPQje/W58SaKS1Eod7B4gL59lfE7ySXxgG3C62fDasDZXXxwvk3l6lk5uuB9sJ8mm3K2C7jLt8OzO0uIU8/JtyuabT4SnOvL1bJolLtvIm3iCSbp2OI8oJqDnmOkq6jHD6hJtu8BQxeslG+rtC74errxzEp+PoA07i17zynAyY8+B550FldwOqsolLtvbxa7l16YXS8Ino+Nn77/ysnPx5OEeK6QO/GAsGezlS9y0XC384TyZ1J1pSiUO9h5s7hiLOQ3pXMl3+ssBgsWuGFrF/c+YOjZnc0F3wOSza6QnsunDQU5oBrDV9SfK21hukIWjXL3jY3N2vuApOt5ObCJ512+4wVyFcfbnytk8xXal+8uviDKThrYuIr6KgqFugRnUSh36w/Uo806ac8gUn7CEmI3IFmA3jKe0rY+x7+rqM0M4QTyvc9w9is/nySfXe5nwNP++m7nFYVyBzuzQyL5nku3z4kmtkMGfidyJFsMxKfZLTjfj005zniN7zGJggz/kCNbjk+7eOS1C/T5FI1yt8HZrGGRpqC9ZYCo4u2955FAvi2+/OhTwZNZxkJ8zibYeY9378nVtdlbJr546/KTyJPIU6+7ZJR78pZd1HG/tXMu/MQTlT9vH6fdSbkwW7mQu/AGnmao2gQOi5HWifDeZiyrjn1qiytqdM8syXoDWY+7ibW/vuN5RaHc/XsB+K+dfTau7LxZkq+hml1+wvMt0rjkP9YZnhpfxeEKmeVYjuzxl9z1Ho2Nbjec756Nz6B/rhSFcgfbQY0EvqYWM0j9f2j+XP0SFe8cTJKKwjX/dpNQkn/8vgbdjJXRrSW1T3yV/9fntqznEPcSscYkfDUOErsB+6FolHsUuZi+79um7xu/y7C5xXOP5S2TyKzkyawRo/JwUi4Wfu7eXSE9l81nZ65q3m50fMm+zIbg12Rrdf1S9pbx3mK2GpQpXF8xYyzsgp57Hr4XM3GuXHM0A9aXWaZZRgG4QubCQhS3jBZKw6kAQ90Xh3K3JZkfsT+zjy2FGi/ePlsebfpJ4/VbpPEeUriAezbZyGXDxrnlnseQyIkqD1uTp8NjKRnlnuz52vlTeZ1BmsosxnTStYWvxUy8T9+P4Q3igv8lIJt6Bp789B3y4kK2LI4f2ddZrp0rZNM8A7dr+F7CMjoulNsLLhnlngRjPA9IYltA3CgNs4xffzN/USHt5fuMKZ6caKO+r+Iz4dS9mrfjm2WaXCHbT9PsClnAUS19UBTK3bpl6tmP26ddzfcygZALl1LP8hMMSKadtjU2i3W4UAimXN/Kq3N5ixpyNctkw3uvnsIs+4mVu4h0EJH3ReTJ8PdIEXlHROaJyL/D9VUTE90yTTLJyOb6CaIqOp6XpnzfU6QFz370juc1t6yzyU7BbBInL/HkB/99tT1i5d/T6+1Q1nJ3Xl0hfXnLJPKks5mj4iY7jZb7t4GPMn7/CrjZGDMaWA9cmsI1vBM9IJlUfjTJbJp+/Kxb5Eccd3xAsSqEAnSFbJEffczt/TaZHfz0DJplZM1/EQyoWpll/JCLwX4XEil3ERkGnA78PfwtwAnAQ2GSu4Gzk1wDiDGJxnUSk23Xy2PL1HPrscnT2ieFaNMv1DDNcSkMu66fu91rcM+WK3i4RMuAqj+zXiF60iVtuf8e+D7QGP7uB1QZY+rD30uBoQmvAdh5a3iVn2QWWi4UjEX+E8mPoNBdiX2NScSbIelZvjdXSHds8/STM8aGJ8SV79ebyOZ87+sT59osIyJnAKuNMVMcz79MRCaLyOTKysroEyzwuQapq6tf8/meBzztzD4J5OdZOQri1vKylJ0Um8BVLth44+TKauJzhnDTYa8zVJ0k2+G74eFCkpb7kcCZIrIIeIDAHHML0FtEysM0w4BlbZ1sjLnNGDPOGDNuwIABCbIR4rtl6j3eewIsa3+fhVvELfxAy/nJjrdHnAFJxyt4Sdoa71Pcsx3LQeVR1hyiIR7+50lEU6i9Vmflboy5xhgzzBhTAZwHvGSMuQB4GTgnTHYR8JjrNZqvlVSABT4nKhRC/pOFLHY+NVWS+Yn7GXC2qTzSiC1TCPhtHAT/3WeoZpPt3x3C63hTAU1i+gHwXRGZR2CDvyMNoT69QXJilkkpH22eZ5suiTeO51l6kdd3PM+nq5mtjGQ26+hJOq3TxpMfnSbpDE8bmivA2JOYfCWOgWc3bFfKo5NEY4x5BXgl3F4AjE9Dbhy8uyP57nsl9EP36YtrgwjezQ6+xyRciJOnJGaBrC3T+GJ3lOFpzMD6+uF/1wZIdlfRULannlPyfoFNwzUPk5hygf+l0vzOQstF19pX7Je0rp9cvrMjvVdazDKelWMB+ELmwhXYh83d90pMLXkpLHelolDuYPeAl1VtYdWGrV7kJw8P4K9l6r/qs6z8XGRbnrSxtp47Xl8YX374386bIonZKjrN5m0NseXaPJ+mJC/NXh1fvsU912wNPJtvf22BF/mQMaAa2yzT5AqZJU0os8GT8s1F0D8Xika5R1GztQ6Aw/73xdjn2tb+y6q28J0H3o8t34ZpS6qYNKeSbfWN0YlbYRP4bMn6Lbw6p5Kqzduc8hcpf90WHn1/mfsyaZYfyHuL1rnJzxr7JeDaR2dQ3xDv+dt8nE3l6+dPzoolO1N+tvxPClcy+tuk+Mq3iWyP/415awB44aP4lYeN/MzjPlwhH5qyFIB73l7sINk+P756BtvqG5lfuYmKCRNjyS0K5W7zzJ6btSo6URb5UQ+4afHe/3yw3EG+/Vv/+j8nx5YP0T2DdZsCpf6XV+Y7ybflzy/P8yp//aZ4lVPcD+7edz6Jd0JItqefqbAmzXGb05Ht9W5x6BEUGj5dIVfX1AKwakNtTOkBURVTU3vm41U1TvKjeN5RtxWFcoccjGdGXGH2ymQvzjb/rzp8/HEqj9scWndxFOS0pVXxZMf8nG9+YW6s9E3Y9gzWx+zZWJlNMtJ8GPP5WM1hyNiO2/OwISeTpJpcIZ17fvkblGj6Zk+95bW85aEtika5+8T/gK1/vBdtywtsqnVrRdrm/6MVG2LJjVt5xLb5Ng2oZrmBzJZ7XCVk4y1zxKh+zdtbY5r1cuENYoO7q6uF7FB4ZU388Tib55OkQvWpelS5h/is+L3Hei6guqlqS12+s9AmWV9vxkH3ctD+iZmN0VpH5ZutUjhuz4HN21vrHCvXLPf9lcN3c5IZB9cB1TgnuI4ZRJWJzHj0hURh5qoV/gPh+8d75eFTfoy0owbsEk92zIc/oEfn9OVnpInrFWXTM2jI0O61jso3G5nKxYf9fdfeXZu3ffVyk8xQjfq2+nTr6JAje3p08SvflaJQ7uDXpmbjbVLo2CqlvQb38CK/Z5dgPtyYgY7yLV/A148eGUuujStkxw4tn0HcYmZjlslUiHFb1nbLyLUcrK2PKd9Cl5ZnLKaxtS59sw8kGFC1SHPrVw6JKTVDvsUFjh7T312+85nRFI1y907EV33afoOdRReC2eSacJ3KfYb08iL/rWtOBPwskwaw79Ag5nd5mVuRzVY59dmlE107dgBgRN9ujvLbJ/OJHDUmXpC8uIHP6l0HJLNcIbPy27Stvt10WeVHzSNJ0nKPOD6yf7ze5I7ys1/h8wcPSybfU8O1KJS7zet+9jvHALBrry5e5P/p/INjy92e7C/w5i8dAMBBI3q7SY8oH//v2FH07FJOjy4OEScsHtAuncvDRbhjDmBapvvHxeNjpW+Wb5mfJ791FODHfDZ6QPfm7U6O9tmofF16VNCjqW9Iv3LNXAbPh/xMXAe0syEiHDXavXUdhW+zz+QfnQTA6IHdI1JuT1Eod4iunfcc3IMvjRvuJaocQFmZ8Jmxg5zNGlF87qBhHDCsFz0d7He2CqxDmWxn/42DjdIrE8FRfGTrqHPHoKg623wtwjME8h3FZ3lAZWXCI1d8CojfMrVNfeTowGMmbsvdNvWvz9kfgDoPrpbQYpZxMVTYtHzHDunZ3DuLg13gOeGCw0bQv3sqy0XvQP/unTlp70Hb9aBsKBrlbkNZmZty8a0cbc9IIt+mwdmhrMzbFGyAMvFnlnFVvvFtvn5cJ5vfT+z82zhDtpirGhrdlG+UfuzYIUjgavaJoqncfLCkOtZ5tu9LEpRNm4ZNhzJxejbW5cehV1xayl2STIKwkF8mzsrRtoD4bFmXlwkNHrvV4tByty2wrsq3icjp782TaOLJtYltEshPmP+ICzQNevoymyStPKJYun4LAP/zf9NinWfrDFGWcDGZKBJ9uxZpymwStT4n/im5J1bL2mvL1G8BKRO3/Nue4ty6sA7+lCRkq91xZ7OP5WImrq83Kv9NH6eveOVNdvHYZhnLDDW13Os8VR7dOsU3mTRhZzJ0a7lbf1virtxtECR2/otCuQNW1dum2gaqNtfFH9SzrP07CCxcs4nbJsWLz2Kbny11DcyOOQOzCRtXyKB14dhtt0izta6Rv01a0BzELU2a7u+Jactj2X3jdHsBPliyPla+4qwBC7B47eZY8pu0e9TzLw+V79UPTnPuvWajQ9hybwoiZottTnbp1DLQH+f7jXOn9Y3GqWzalP26hkY2b2twCMxndwcGw5xVG5m+1N5sVTzK3YKHpwbR30Ze81Tsc20GZRau2QTA/z41O758izQfLq1mw9Z6XpsbL76Mbcu6vEz4zwfLqaxxC6Bky/m3v22d1vbjbHo9M5dv4PcvzImdJ1uzzD1vfxKrBWbjR595/OdPzmJF9ZYY8pv83O1s7is3bGVtzOBqNkwOo3H+cuJHTi3UqMbH3rv2bN6OK9+mYdMULnq/nz4XS7Yt/wojTh748+djn2vT83h2ZhA87LN/et1ablEod99u4rbKcVqMWjMJF97xbqz0xtgVkAVh5XTo9S/Elh+HGcvceh/ZyLy/BycvtT7PfsCt5QIuawLEmdkau/VOdOWU6a64zYNHS3VGWIml6+PnP4r9hrXMv5hXudH6PNuyGXfyVbN8y3QeLTLOOCt3ERkuIi+LyCwRmSki3w739xWR50Vkbvi/j428tRtrWVm9lTfnrWHOqhqem7kSYwzzVtcwZdH62DNI/2/yEhoaDTOWVbNwzabtgvu8OX8N1ZvrqG9o5JO1m6naXBd7IYUpi9exumYr2+obmbe6pTAuWrOJGcuqeW1uJa/NreTjlTVOESUfePcT1mys5enpK1i7sZZXPl7N6g1bWV61hRufns26TduYu6qGWcs3UFvfGNs/++XZq3lq+go+WFJFZU0tK6q3sLWugcVrNzWnmbOqprkbG1f++5+sZ1nVFuoaGnfoKcxavoFlVVvYVFtvbULIVJ6VNbXc10Zo3rqGRuauqqGyppY1G2uZtqSqOdSxrU0c4FM3vsRb89fS2Gio3lLH+k3bmLOqpk2ltnCNnSIqy8jA0vVbuOWFuTwydSnzVtdQW9/Aiuot3PfOJ1TW1DJ9aTWbw8lCj1uGmG4yywBc9s/JrN1YG15rM4vXbuKZGStYuGYT1ZvraGg0rKjewr/eXsxb89dayb/kyJaZwafd8lpzALd3F65rc9Zt1eZtvLdoHXe9schKPrS8g1N+/xpzVtWwqbaejWEZmZsRTnftxlrueXtx+G1vtOoW//iMsc3bFRMmMvHDFby9ILj3+oZG6hoaWV2zlUVrWsr/8qqghxV3ktGdry9k2pIqGhoNW+saeHvB2uZnVNfQyJTF69lUW8+81TUsDvVPHG54+iP+8/4ypizOvrZBkjVU64GrjTFTRaQHMEVEngcuBl40xtwoIhOACQSLZrfL9GXVHPLL7K1Jm5glPzhlL371TGAy+d5DH/K9hz7c7vhPPzuWnz4Rf8GEtvjCX9+KlX5ZlX1XHGDCI9PhkentHr/11e3t/k9MW8ENn9/fWv4ld71nla5bpw7UN5rY0R4/95c3t/v9xXHD+HhlTbu9nyhTUevv64ePTmfyonX84ux9mbGsmi/dlt0UFFV5t65j2jMt/eoL+/Gvtxfv2DuxNMtAdo+QHz7a9juPDl7VMiA5c/mGyO+pNVGt/T0H92BYn64sXb+FTdsatgtv27S/id0H7MKCyk1ticlK5jv4zM2T2kzzz6+N56t3bt+ztQnc1doH/cr7prabtqJfNxZl9K7ixjNyWZQlDn971S5st3PL3RizwhgzNdyuAT4ChgJnAXeHye4Gzna9xnbXs0gzfmT2TkJSxf7Md452Pnfm8mhTxf4ZXdO4bKx1mxYeRZNSvOvNRYnkPDh5aVazVtQqQm1N4Hjk/WXsc92zkYodaLOln8kWy2n1P3h4eptmpxVV2U05TjODY9CxQ9y+7fbYrAD2hXam2WcqdsBJsdvSWrGDXaTNOGErFrUymzX1gvKJS3ycVGzuIlIBHAS8AwwyxqwID60EBqVxDZsCc8hufdO4VLvsNbhndKIEZE5TL0aGZkQPLDQuOHxE1uPD+nSj3y7uMwyj4swP6+MWs6aJKOvVkF7Jnr2Nm92ite5K28bFN24LOQ6H7e6uG2wsh9d9dmx0ogScsm/82FaJlbuIdAceBr5jjNmuhJvAp6nNRyMil4nIZBFxW1euBLnxC/ZmldbsMyS64pkYxk9x4Zg9ogNevTHhBGf5B1j0Wt5MIP/zB2UP7tSlY4fmGB4u2CivOy8e5yw/yj2wrEz4xyWHOsu38ZBNEnqg3GIWzvA+/hoH/bt39qqALzlyJIdWWA0v5oxEyl1EOhIo9nuNMY+Eu1eJyK7h8V2BNiPkG2NuM8aMM8a4l/g2cC3gu1tGjrvQ48IFncrLuOCw7C3M9uhr0ercZ0gv6/tszWkOLYc4/OiM6A9vSO+u/MQiXWs6lZfR1WKSjIhw7Wl7x5YPcNnRu0emOWGvQc6mPZuW9T67uvcs6y20+0/O2MdZfheLuC5/viBpcL7snLR3KkaEdtk1Ye8pbZJ4ywhwB/CRMeZ3GYceBy4Kty8CHouS1TvFqGrH7zmQf1x8KPdcelis8x694kirdD89M7qA/+OSQ/neyXtut+/88XZK+xdn7du83dTYsQl4dNM5B1jJv/2icXz2gCFWaTOpsKwUbCqnQ3YLWjhXHj+qed9Bw3tbyf/aUSOjE2UwemB33g7DEdvw9WN259QYFdn4kX352Zn7WD+fvQb35HAHE8Fwi1DEA3t24eJPVcSWDdBvl2iTyOBeXfjR6fErv9m/OMUq3a69urLgf0/j5H2yK+HW35Ytw/t24zfnHsBXIkx0mVxx3CgeuvwIq7S/Pmd/vnXimFh5uvSokSy84TSrtE9cFfS8zzrQ7vsV9+nichTwGjAdaKr2f0hgd38QGAEsBr5ojMnqszNu3DgzefJkpi2pok+3Tixcu4n9h/Zi3eZtDOzRmeotdfTs2tEpYuK81TUM6N6FdxetY1t9IxX9u7FwzSbG7tqTrXWBC9Sgnl0YHCNUcOA2VUuX8jL6de9M1eZtNDQa+nXf/gOZtqSKV+dUMmpAd07bb7C1S9XajbV0KBN6d+vEW/PXMnZIT3p2KafRwIrqLTw9fSUXHrEbHTuUMWluJf136bydn7ANn6zdzJDeXahvNExbUsVhu/ejtr6BKYvWc/ju/ahvNLwxfw1Hje7PtCVVjKuIp5A21tbTubyM8jJh0tw1jOjbjYbG4Ll9alR/ttY10KVjB+ZXbqR/98706mr/bhsbDVvrGygvK2v2SR/etxvVm+tYt3kbg3p2pmOHMuobjFWLPRtVm7fRqbyMLdsamt9vQ6Ph9XlrOGZM/0SxuGvrGxAEkcBbqEeXcqo21zFjWTV7hNFHO3UoY2jvrpTFDC5ijGFZ1RYaGg2NBrp3Lqdjh6BMzVxeTb9dOjOoZ2eenbmSkf27s2eMaKfGGFZtqGXOqhqOHN2f+sZGqrfUMW1JNbsP2IXyMqFHl45srWtgiOM4zJzQ9bGh0dC5vIyOHcp4ftYqvnDIMHp2Kad6S13ghly5kd367eI83rN0/WZEhI4dhPoGQ6MxVG2uo1unDvTu1smqR9waYwzvLFzHYSP70miCOQI1W+sY0KMz81ZvpL7RhN+DYVDP+CHKm5iyeB3jKvpNac/64azc06RJuSuKoij2iEi7yr0oZqgqiqIo8VDlriiKUoKoclcURSlBVLkriqKUIKrcFUVRShBV7oqiKCWIKndFUZQSRJW7oihKCVIQk5hEpAb42OMlegE+l1FS+Sq/UOUXc95VfjR7GmPanl5sjMn7HzDZs/zbVL7K3xnlF3PeVb6V/HZ1585ilnlC5av8nVR+Medd5SegUMwyk03KoX8VRVFKnWy6s1Ba7rflOwOKoihFSLu6syCUuzEmNeUuIqeIyMciMi9coBsRuTfcN0NE7gwXGUlT/h0iMk1EPhSRh8LVqVKTn3HsDyKy0VV2lvzfJSILReSD8O/AlOWLiFwvInNE5CMR+VbK8l/LyPtyEflPyvJPFJGpofzXRWR0yvJPCOXPEJG7RcRpwdWwbK8WkRkZ+/qKyPMiMjf877xcUDvyzxWRmSLSKCKJet/tyL9JRGaH39ajItI7Zfm/CGV/ICLPiUj8xQ6yyM84drWIGBHp7yq/LbLqTp/G/lz/AR2A+cDuQCdgGjAWOI1gfXoB7ge+kbL8nhlpfgdMSFN+eGwc8C9go4fncxdwjsfnfwnwT6AsTDcw7eeTkeZh4Ksp538OsHeY5grgrpTlLwH2CNP8HLjUUf4xwMHAjIx9v24qj8AE4FcJ3m9b8vcG9gReAcYlLD9tyf8MUB5u/8pD/jO/3W8Bt6YpP9w/HHiWYH2L/kmeUZy/vLTc22m9XBX+TlK7jQfmGWMWGGO2AQ8AZxljnjIhwLtA9gU148vfEN6DAF1pZ91YV/ki0gG4Cfi+o9ys8hPKtJH/DeDnxphGAGNMm0svJpAPgIj0BE4A/pOyfAM0rWHXC1ieovwvANuMMXPCNM+H+2JjjJkEtF4Y5yzg7nD7buBsF9ntyTfGfGSMScWNuR35zxlj6sOfb+P+7bYnP3Pd511w/3bbe/4ANxN8uzkd4My5cg8V1Z+BUwlaLeeLyFjgDeAkgtrNlaEEraAmlob7mq7dEbgQeCZt+SLyD2AlsBfwx5TlXwU8boxZ4Sg3Sj7A9WH39GYRcV2Gvj35o4AvSbAg+tMiEm8tsmj5TZwNvNjqg01D/n8BT4nIUoLyc2OK8gcD5RkmjXMIWnppMSij3KwE/C4k6pevAU+nLTQ0GS4BLgB+krLss4Blxphpacq1IR8t9/Zav+8bYxZ5vvZfgEnGmNfSFmyMuQQYAnwEfClF0d2Ac3GvMGy4hqBSOhToC/wgZfmdga0mGNW/HbgzZflNnE9gdkub/wZOM8YMA/5BYHpLCwOcB9wsIu8CNUBDivJbLhT0XPPvHueAiFwL1AP3pi3bGHOtMWZ4KPuqtOSKSDeCpUdTrTBsyYdyj2p9JWEZ27d6hoX7EJHrgAHAd33IBzDGNNDS1U5L/nxgNDBPRBYB3URkXorylxljVoRWq1oC5TU+TfkE7/iRcN+jwP4pyyc05Y0HJjrKbk/+KuAAY8w74b5/A59KUf4yY8xbxpijjTHjgUkENv60WCUiuwKE/11NYnlDRC4GzgAuCCsoX9yL+7fbFqOAkcC08NsdBkwVEfsV2BNQEN4yKfIeMEZERopIJ4IW0eMi8l/AycD5TXbflOWPhmab+5nA7BTl/8cYM9gYU2GMqQA2G2NcvTXay3/Txy8Epo0dRvuTyCewgR8fpjkWd+XVnnwIzBlPGmO2OsrOJr+XiOwRpvk0Qe8sNfkiMhAgNIf9ALg1wT205nHgonD7IuCxFGV7R0ROIbBXn2mM2exBfqaJ8Czcv90dMMZMN8YMzPh2lwIHG2NWpnWNqAzk9A84Ang24/c1wDUZvxeRYESZwDNmDkGL99pwX334+4Pw7ydpySeoIN8AphMoxXvJGIFPI/+tjjt7y2R5Pi9l5P8eoHvK8nsTtKinA28RtIRTfT4E3hqnpFA+28r/58K8Twuvs3vK8m8iqDA+Br6TQPb9wAqgjkCRXAr0A14E5gIvAH1Tlv+5cLuWoJfzbMry5xH09Ju+3STeLG3Jfzgs9x8SzCYdmqb8VscXkUNvmZzPUA19eOcAJxJ0U98DvmyMmRkeX0TgUrUmpxlTFEUpIXJuljGBW9NVBH6fHwEPGmNmisi3Qm+EYcCHIvL3XOdNURSlVCiI2DKKoihKupTagKqiKIqCKndFUZSSJKfKXUTODsML7JXL6yqKouxs5Lrlfj7wevjfmjBkgaIoimJJzpS7BGFwjyLwLT0v3HeciEwSkYlhILFbRaQsPLZRRH4rItMIfOMVRVEUS3LZcj8LeMYE0e/Wisgh4f7xwDcJgoiNAj4f7t8FeMcYc4Ax5vUc5lNRFKXoyaVyP58g7grh/ybTzLsmCCLWQDDD66hwfwPB7DFFURQlJk4rvsRFRPoSxNneT0QMwaIFhmBKemtH+6bfW0OFryiKosQkVy33c4B/GWN2M0EQneHAQuBoYHwYSKmMIFSummAURVESkivlfj5BqNdMHg73vwf8iSAUwcI20imKoigxyWv4ARE5DvgfY8wZecuEoihKCaIzVBVFUUoQDRymKIpSgmjLXVEUpQTxotxFZLiIvCwis0Rkpoh8O9zfV0SeF5G54f8+4f69ROQtEakVkf9pQ14HEXlfRJ70kV9FUZRSw1fLvR642hgzFjgcuFJExgITgBeNMWMIlv6aEKZfB3wL+E078r6N+7qViqIoOx1elLsxZoUxZmq4XUOgmIcShCC4O0x2N8FizBhjVhtj3iNYe3A7RGQYcDqgKzMpiqJY4t3mLiIVwEHAO8AgY8yK8NBKYJCFiN8TrH7e6CN/iqIopYhX5R5GgnyYYEX3DZnHTOCmk9VVR0TOAFYbY6b4y6WiKErp4U25i0hHAsV+rzHmkXD3KhHZNTy+K7A6QsyRwJkisogg2NgJInKPpywriqKUDL68ZQS4A/jIGPO7jEOPAxeF2xcBj2WTY4y5xhgzzBhTQRAD/iVjzFc8ZFlRFKWk8DKJSUSOAl4DptNiK/8hgd39QWAEsBj4ojFmnYgMBiYDPcP0G4GxmaYcDVWgKIpij85QVRRFKUF0hqqiKEoJospdURSlBFHlriiKUoKoclcURSlBVLkriqKUIKrclaJERHqLyBXh9hARecjjtQ4UkdN8yVcUH6hyV4qV3sAVAMaY5caYczxe60BAlbtSVKifu1KUiMgDBFFGPwbmAnsbY/YVkYsJoo3uAowhCCPdCbgQqAVOCyfOjQL+DAwANgNfN8bMFpFzgeuABqAaOAmYB3QFlgE3ECzkfgvQBdgCXGKM+TjGtV8BpgHHAuXA14wx7/p4TspOjDFG//Sv6P6ACmBGG9sXEyjjHgSKuxq4PDx2M0EQOwjWExgTbh9GENoCglnVQ8Pt3hky/5Rx7Z5Aebh9EvBwzGu/Atwebh/TlHf90780/8rTqiQUpYB42QTrCNSISDXwRLh/OrB/GK30U8D/BWGQAOgc/n8DuEtEHgQeoW16AXeLyBiCyKYdba+dke5+AGPMJBHpKSK9jTFVbrerKDuiyl0pRWozthszfjcSlPkyoMoYc2DrE40xl4vIYQQLxEwRkUPakP8LAiX+uXC9gldiXLv5Uq0vneV+FCU2OqCqFCs1BOaP2JggIN3C0L6OBBwQbo8yxrxjjPkJUAkMb+NavQjs7xCYYlz4Uni9o4BqY0y1oxxFaRNV7kpRYoxZC7whIjOAmxxEXABcKiLTgJkEg7MAN4nI9FDumwQDny8DY0XkAxH5EvBr4AYReR/33u/W8PxbgUsdZShKu6i3jKLkmNBb5n+MMZPznReldNGWu6IoSgmiLXdFUZQSRFvuiqIoJYgqd0VRlBJElbuiKEoJospdURSlBFHlriiKUoKoclcURSlB/j9GHH1aLbfaTAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "df_daily_jumpsup.plot(legend=False, ax=ax)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练数据预处理\n",
    "\n",
    "* 我们的训练数据包含了14天的采样，每天每隔5分钟采集一次数据，所以：\n",
    "* 每天包含 24 * 60 / 5 = 288 个timestep \n",
    "* 总共14天 288 * 14 = 4032 个数据\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练数据总量: 4032\n"
     ]
    }
   ],
   "source": [
    "#初始化并保存我们得到的均值和方差，用于初始化数据。\n",
    "training_mean = df_small_noise.mean()\n",
    "training_std = df_small_noise.std()\n",
    "df_training_value = (df_small_noise - training_mean) / training_std\n",
    "print(\"训练数据总量:\", len(df_training_value))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>timestamp</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:00:00</th>\n",
       "      <td>-0.858829</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:05:00</th>\n",
       "      <td>-0.728993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:10:00</th>\n",
       "      <td>-0.848148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:15:00</th>\n",
       "      <td>-0.729586</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-01 00:20:00</th>\n",
       "      <td>-0.731173</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:35:00</th>\n",
       "      <td>-0.791647</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:40:00</th>\n",
       "      <td>-0.780255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:45:00</th>\n",
       "      <td>-0.833640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:50:00</th>\n",
       "      <td>-0.735102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-04-14 23:55:00</th>\n",
       "      <td>-0.846089</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>4032 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                        value\n",
       "timestamp                    \n",
       "2014-04-01 00:00:00 -0.858829\n",
       "2014-04-01 00:05:00 -0.728993\n",
       "2014-04-01 00:10:00 -0.848148\n",
       "2014-04-01 00:15:00 -0.729586\n",
       "2014-04-01 00:20:00 -0.731173\n",
       "...                       ...\n",
       "2014-04-14 23:35:00 -0.791647\n",
       "2014-04-14 23:40:00 -0.780255\n",
       "2014-04-14 23:45:00 -0.833640\n",
       "2014-04-14 23:50:00 -0.735102\n",
       "2014-04-14 23:55:00 -0.846089\n",
       "\n",
       "[4032 rows x 1 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_training_value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "df_training_value.plot(legend=False, ax=ax)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 创建序列\n",
    "\n",
    "从训练数据中创建组合时间步骤为288的连续数据值的序列。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "#时序步长\n",
    "TIME_STEPS = 288    \n",
    "\n",
    "class MyDataset(paddle.io.Dataset):\n",
    "    \"\"\"\n",
    "    步骤一：继承paddle.io.Dataset类\n",
    "    \"\"\"\n",
    "    def __init__(self,data,time_steps):\n",
    "        \"\"\"\n",
    "        步骤二：实现构造函数，定义数据读取方式，划分训练和测试数据集\n",
    "        注意：我们这个是不需要label的哦\n",
    "        \"\"\"\n",
    "        super(MyDataset, self).__init__()\n",
    "        self.time_steps = time_steps\n",
    "        self.data = paddle.to_tensor(self.transform(data),dtype='float32')\n",
    "\n",
    "    def transform(self,data):\n",
    "        '''\n",
    "        构造时序数据\n",
    "        '''\n",
    "        output = []\n",
    "        for i in range(len(data) - self.time_steps):\n",
    "            output.append(np.reshape(data[i : (i + self.time_steps)],(1,self.time_steps)))\n",
    "        return np.stack(output)\n",
    "\n",
    "    def __getitem__(self, index):\n",
    "        \"\"\"\n",
    "        步骤三：实现__getitem__方法，定义指定index时如何获取数据，并返回单条数据（训练数据）\n",
    "        \"\"\"\n",
    "        data = self.data[index]\n",
    "        label = self.data[index]\n",
    "        return data,label\n",
    "\n",
    "    def __len__(self):\n",
    "        \"\"\"\n",
    "        步骤四：实现__len__方法，返回数据集总数目\n",
    "        \"\"\"\n",
    "        return len(self.data)\n",
    "\n",
    "# 实例化数据集\n",
    "train_dataset = MyDataset(df_training_value.values,TIME_STEPS)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.模型组网\n",
    "\n",
    "用paddle.nn下的API，Layer,Conv1d、rlue完成网络的搭建。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "class AutoEncoder(paddle.nn.Layer):\n",
    "    def __init__(self):\n",
    "        super(AutoEncoder, self).__init__()\n",
    "        self.conv0 = paddle.nn.Conv1D(in_channels=1,out_channels=32,kernel_size=7,stride=2)\n",
    "        self.conv1 = paddle.nn.Conv1D(in_channels=32,out_channels=16,kernel_size=7,stride=2)\n",
    "        self.convT0 = paddle.nn.Conv1DTranspose(in_channels=16,out_channels=32,kernel_size=7,stride=2)\n",
    "        self.convT1 = paddle.nn.Conv1DTranspose(in_channels=32,out_channels=1,kernel_size=7,stride=2)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = self.conv0(x)\n",
    "        x = F.relu(x)\n",
    "        x = F.dropout(x,0.2)\n",
    "        x = self.conv1(x)\n",
    "        x = F.relu(x)\n",
    "        x = self.convT0(x)\n",
    "        x = F.relu(x)\n",
    "        x = F.dropout(x,0.2)\n",
    "        x = self.convT1(x)\n",
    "        return x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.模型训练\n",
    "\n",
    "接下来，我们用一个循环来进行模型的训练，我们将会：\n",
    "\n",
    "- 使用paddle.optimizer.Adam优化器来进行优化。\n",
    "\n",
    "- 使用paddle.nn.loss.MSELoss来计算损失值。 \n",
    "\n",
    "- 使用paddle.io.DataLoader来加载数据并组建batch。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "  0%|          | 0/200 [00:00<?, ?it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练开始\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 200/200 [08:03<00:00,  2.42s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import tqdm\n",
    "#参数设置\n",
    "epoch_num = 200\n",
    "batch_size = 128\n",
    "learning_rate = 0.001\n",
    "\n",
    "def train():\n",
    "    print('训练开始')\n",
    "    #实例化模型\n",
    "    model = AutoEncoder()\n",
    "    #将模型转换为训练模式\n",
    "    model.train()\n",
    "    #设置优化器，学习率，并且把模型参数给优化器\n",
    "    opt = paddle.optimizer.Adam(learning_rate=learning_rate,parameters=model.parameters())\n",
    "    #设置损失函数\n",
    "    mse_loss = paddle.nn.loss.MSELoss()\n",
    "    #设置数据读取器\n",
    "    data_reader = paddle.io.DataLoader(train_dataset,\n",
    "                        places=[paddle.CPUPlace()],\n",
    "                        batch_size=batch_size,\n",
    "                        shuffle=True,\n",
    "                        drop_last=True,\n",
    "                        num_workers=0)\n",
    "    history_loss = []\n",
    "    iter_epoch = []\n",
    "    for epoch in tqdm.tqdm(range(epoch_num)):\n",
    "            for batch_id, data in enumerate(data_reader()):             \n",
    "                x = data[0]\n",
    "                y = data[1]\n",
    "                out = model(x)\n",
    "                avg_loss = mse_loss(out,(y[:,:,:-1]))   #输输入的数据进过卷积会丢掉最后一个数据所以只剩287\n",
    "                avg_loss.backward()\n",
    "                opt.step()\n",
    "                opt.clear_grad()\n",
    "            iter_epoch.append(epoch)\n",
    "            history_loss.append(avg_loss.numpy()[0])\n",
    "    #绘制loss\n",
    "    plt.plot(iter_epoch,history_loss, label = 'loss')\n",
    "    plt.legend()\n",
    "    plt.xlabel('iters')\n",
    "    plt.ylabel('Loss')\n",
    "    plt.show()\n",
    "    #保存模型参数\n",
    "    paddle.save(model.state_dict(),'model')\n",
    "\n",
    "train()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.探测异常时序\n",
    "\n",
    "我们将用我们训练好的模型探测异常时序：\n",
    "\n",
    "1. 使用自编码器计算出无异常时序数据集里的所有重建损失\n",
    "\n",
    "2. 找出最大重建损失并且以这个为阀值，模型重建损失超出这个值则输入的数据为异常时序 \n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEGCAYAAABy53LJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAhKklEQVR4nO3df5RfdX3n8efLBALlNyF6kCCJgnoCtRRicLtKa1kg2JaghRpqlSprWpHVntYew3ZlWYqt1BVOXaktCoJRCyyUOpZQtELXrVXMgPwKNDpEXBLRhB9FKAUMvPaP+xn5Mnwzc+9k7sydmdfjnHvm3s/93Pt938/3x3vur8+VbSIiIup60VQHEBER00sSR0RENJLEERERjSRxREREI0kcERHRyNypDmAy7Lfffl60aNFUhxERMa3ccsstD9peMLJ8ViSORYsWMTg4ONVhRERMK5K+3688h6oiIqKRJI6IiGgkiSMiIhpJ4oiIiEaSOCIiopEkjoiIaCSJIyIiGkniiIiIRpI4IiKikVYTh6TlkjZIGpK0us/8eZKuLPNvlrRoxPyXSXpc0gfqrjOmj0Wrr5vqECJiHFpLHJLmABcBJwBLgFMlLRlR7XTgEdsHAxcC54+YfwFwfcN1RkREi9rc41gGDNneaPtp4ApgxYg6K4DLy/jVwDGSBCDpJOB7wPqG64yIiBa1mTgOAO7vmd5UyvrWsb0NeBSYL2l34IPA/xjHOgGQtErSoKTBrVu3jnsjIiLi+bp6cvwc4ELbj493BbYvtr3U9tIFC17QK3BERIxTm92qbwYO7JleWMr61dkkaS6wF/AQcBRwsqQ/A/YGnpX0JHBLjXVGRESL2kwc64BDJC2m+nFfCfzmiDoDwGnAN4CTgRttG3jDcAVJ5wCP2/5ESS5jrTMiIlrUWuKwvU3SmcANwBzgUtvrJZ0LDNoeAC4B1kgaAh6mSgSN19nWNkRExAu1+gRA22uBtSPKzu4ZfxI4ZYx1nDPWOiMiYvJ09eR4RER0VBJHREQ0ksQRERGNJHFEREQjSRwREdFIEkdERDSSxBEREY0kcURERCNJHBER0UgSR0RENJLEERERjSRxREREI0kcERHRSBJHREQ0ksQRERGNJHFEREQjSRwREdFIq4lD0nJJGyQNSVrdZ/48SVeW+TdLWlTKl0m6rQy3S3pzzzL3SbqzzBtsM/6IiHih1h4dK2kOcBFwLLAJWCdpwPbdPdVOBx6xfbCklcD5wFuBu4Cl5Rnj+wO3S/qS7W1luTfafrCt2CMiYvva3ONYBgzZ3mj7aeAKYMWIOiuAy8v41cAxkmT7iZ4ksQvgFuOMiIgG2kwcBwD390xvKmV965RE8SgwH0DSUZLWA3cCv9uTSAx8WdItklZt78UlrZI0KGlw69atE7JBERHR4ZPjtm+2fSjwWuAsSbuUWa+3fQRwAvBeSUdvZ/mLbS+1vXTBggWTFHVExMzXZuLYDBzYM72wlPWtI2kusBfwUG8F2/cAjwOHlenN5e8W4FqqQ2IRETFJ2kwc64BDJC2WtDOwEhgYUWcAOK2MnwzcaNtlmbkAkg4CXg3cJ2k3SXuU8t2A46hOpEdExCRp7aqqckXUmcANwBzgUtvrJZ0LDNoeAC4B1kgaAh6mSi4ArwdWS/oJ8Cxwhu0HJb0cuFbScOxfsP33bW1DRES8UGuJA8D2WmDtiLKze8afBE7ps9waYE2f8o3Az018pBERUVdnT45HREQ3JXFEREQjSRwREdFIEkdERDSSxBEREY0kcURERCNJHBER0UgSR0RENJLEERERjSRxREREI0kcERHRSBJHREQ0ksQRERGNJHFEREQjSRwREdFIEkdERDTSauKQtFzSBklDklb3mT9P0pVl/s2SFpXyZZJuK8Ptkt5cd50REdGuRolD0osk7Vmz7hzgIuAEYAlwqqQlI6qdDjxi+2DgQuD8Un4XsNT24cBy4K8kza25zoiIaNGYiUPSFyTtKWk3qh/0uyX9YY11LwOGbG+0/TRwBbBiRJ0VwOVl/GrgGEmy/YTtbaV8F8AN1hkRES2qs8exxPaPgZOA64HFwNtrLHcAcH/P9KZS1rdOSRSPAvMBJB0laT1wJ/C7ZX6ddVKWXyVpUNLg1q1ba4QbERF11EkcO0naiSpxDNj+Cc/tAbTG9s22DwVeC5wlaZeGy19se6ntpQsWLGgnyIiIWahO4vgr4D5gN+Brkg4Cflxjuc3AgT3TC0tZ3zqS5gJ7AQ/1VrB9D/A4cFjNdUZERIvGTBy2P277ANtvcuX7wBtrrHsdcIikxZJ2BlYCAyPqDACnlfGTgRttuywzF6AkqldTJa8664yIiBbVOTn+/nJyXJIukXQr8MtjLVfOSZwJ3ADcA1xle72kcyWdWKpdAsyXNAT8PjB8ee3rgdsl3QZcC5xh+8HtrbPJBkdExI6ZW6POu2z/uaTjgX2oToyvAb481oK21wJrR5Sd3TP+JHBKn+XWlNeotc6IiJg8dc5xqPx9E7Cm/IevUepHRMQMVidx3CLpy1SJ4wZJewDPthtWRER0VZ1DVacDhwMbbT8haT7wzlajioiIzhozcdh+VtJC4DclAfwf219qPbKIiOikOldVfQR4P3B3Gd4n6U/aDiwiIrqpzqGqNwGH234WQNLlwLeB/9pmYBER0U11e8fdu2d8rxbiiIiIaaLOHsefAt+WdBPVZbhH89yNehERMcvUOTn+15L+kaqzQYAP2v5hq1FFRERnbTdxSDpiRNGm8velkl5q+9b2woqIiK4abY/jY6PMMzX6q4qIiJlnu4nDdp0ecCMiYpZp9MzxiIiIJI6IiGgkiSMiIhqpcx8Hkg4ADuqtb/trbQUVERHdNWbikHQ+8FaqfqqeKcUGkjgiImahOnscJwGvsv1U05VLWg78OTAH+LTtj4yYPw/4LHAk8BDwVtv3SToW+AiwM/A08Ie2byzL/COwP/DvZTXH2d7SNLaIiBifOoljI7AT0ChxSJoDXAQcS3Xz4DpJA7bv7ql2OvCI7YMlrQSG924eBH7N9g8kHUb1jPEDepZ7m+3BJvFERMTEqJM4ngBuk/RVepKH7feNsdwyYMj2RgBJVwArqA55DVsBnFPGrwY+IUm2v91TZz2wq6R549nriYiIiVUncQyUoakDgPt7pjcBR22vju1tkh4F5lPtcQz7deDWEUnjM5KeAa4BzrPtkS8uaRWwCuBlL3vZOMKPiIh+6nRyeLmknYFXlqINtn/SblgVSYdSHb46rqf4bbY3l2efXwO8neo8yfPYvhi4GGDp0qUvSCwRETE+dZ4A+EvAd6nOV/wF8B1JR9dY92bgwJ7phaWsbx1Jc6me9fFQmV4IXAu8w/a9wwvY3lz+PgZ8geqQWERETJI6NwB+jOrKpV+0fTRwPHBhjeXWAYdIWlz2WFbywkNeA8BpZfxk4EbblrQ3cB2w2vbXhytLmitpvzK+E/CrwF01YomIiAlSJ3HsZHvD8ITt71BdZTUq29uAM6muiLoHuMr2eknnSjqxVLsEmC9pCPh9nntA1JnAwcDZkm4rw4uBecANku4AbqPaY/lUjW2IiIgJUufk+KCkTwOfK9NvA2pdCmt7LbB2RNnZPeNPAqf0We484LztrPbIOq8dERHtqJM43gO8Fxi+/Pb/Up3riIiIWajOVVVPAReUISIiZrnRHh17le3fkHQnVd9Uz2P7Na1GFhERnTTaHsf7y99fnYxAIiJietjuVVW2HyijZ9j+fu8AnDE54UVERNfUuRz32D5lJ0x0IBERMT2Mdo7jPVR7Fq8o900M2wP457YDi4iIbhrtHMcXgOuBP+W5G/MAHrP9cKtRRUREZ412juNR2/dRPYjp4Z7zG9skjezlNiIiZok65zg+CTzeM/14KYuIiFmoTuJQ7/MubD9LvTvOIyJiBqqTODZKep+kncrwfqrHyUZExCxUJ3H8LvALVD3RDj/Fb1WbQUVERHeNmThsb7G90vaLbb/E9m/a3jIZwUXsiEWrr5vqECJmpDHPVUj6DP37qnpXKxFFRESn1TnJ/Xc947sAbwZ+0E44ERHRdXUOVV3TM3we+A1gaZ2VS1ouaYOkIUmr+8yfJ+nKMv9mSYtK+bGSbpF0Z/n7yz3LHFnKhyR9XJJqb21EROywOifHRzoEePFYlSTNAS6i6tdqCXCqpCUjqp0OPGL7YKrnmJ9fyh8Efs32z1I9k3xNzzKfBN5d4jgEWD6ObYiIiHEaM3FIekzSj4cH4EvAB2usexkwZHuj7aeBK4AVI+qsAC4v41cDx0iS7W/bHj4cth7Yteyd7A/safub5d6SzwIn1YglIiImyKiJoxwGOtT2nj3DK21fU2PdBwD390xvKmV969jeBjwKzB9R59eBW8uTCA8o6xltncOxr5I0KGlw69atNcKNqC9XbE2ctOX0M2riKP/VT9m7KulQqsNXv9N0WdsX215qe+mCBQsmPriIiFmqzjmOWyW9dhzr3gwc2DO9sJT1rSNpLrAX8FCZXghcC7zD9r099ReOsc6IiGhRncRxFPANSfdKuqNc0XTHmEvBOuAQSYsl7QysBAZG1BmgOvkNcDJwo21L2ptqT2e17a8PVy5PJfyxpNeVw2jvAL5YI5aIiJggde7jOH48K7a9TdKZwA3AHOBS2+slnQsM2h4ALgHWSBoCHqZKLgBnAgcDZ0s6u5QdV+5YPwO4DNiV6nkh148nvoiIGJ86ieM822/vLZC0Bnj7dur/lO21wNoRZWf3jD8JnNJnufOA87azzkHgsBpxzziLVl/HfR/5lakOI2LK5DvQDXUOVR3aO1HuzziynXAiIqLrtps4JJ0l6THgNT33cTwGbCHnFSIiZq3RHh37p7b3AD7acw/HHrbn2z5rEmOM6ITcb9Bf2mX2qXOo6u8k7QYg6bckXSDpoJbjioiIjqr7zPEnJP0c8AfAvVRdfURExCxUJ3FsK3eQrwA+YfsiYI92w4qImDw53NZMnctxH5N0FvBbwNGSXgTs1G5YERHRVXX2ON4KPAWcbvuHVN18fLTVqCIiorPG3OMoyeKCnun/R85xRETMWnWex/EWSd+V9OjwvRzluRwRETEL1TlU9WfAibb36rmXY8+2A4tKTtpFRNfUSRw/sn1P65FEbUkmMdWm4jOYz3131Ekcg5KulHRqOWz1FklvaT2y6IR8WSdf2jy6rs7luHsCTwDH9ZQZ+JtWIoqIiE4bc4/D9jv7DO+ajOCiXW3+Z5v/mqOr8tnccXWuqloo6VpJW8pwTXmsa0REzEJ1znF8huoRry8tw5dK2ZgkLZe0QdKQpNV95s8r50+GJN0saVEpny/pJkmPS/rEiGX+sazztjK8uE4sMbr8FxYxPXThu1oncSyw/Rnb28pwGbBgrIXKA58uAk4AlgCnSloyotrpwCO2DwYuBM4v5U8CHwI+sJ3Vv8324WXYUmMbYobqwpcoYrapkzgeKt2pzynDbwEP1VhuGTBke6Ptp4ErqDpK7LUCuLyMXw0cI0m2/832P1ElkJgh8iM/Pc2U922mbEcX1Ekc7wJ+A/gh8ABwMvDOGssdANzfM72plPWtY3sb8Cgwv8a6P1MOU31IkmrUjxHyJYqI8apzVdX3bZ9oe4HtF9s+qfRXNVXeZvtngTeU4e39KklaJWlQ0uDWrVtbC2a0H+D8OM8ck/1e5rMTXVbnqqrLJe3dM72PpEtrrHszcGDP9MJS1reOpLnAXoxxGMz25vL3MeALVIfE+tW72PZS20sXLBjzlExMc/mhfU7+mZk+puv7UedQ1Wts/+vwhO1HgJ+vsdw64BBJiyXtDKykujqr1wBwWhk/GbixPDSqL0lzJe1XxncCfhW4q0YsnTORH5jp+uHrurTr2NJG9cy0dqqTOF4kaZ/hCUn7Uq879m3AmcANwD3AVbbXSzpX0oml2iXAfElDwO8DP71kV9J9VN25/7akTeWKrHnADZLuAG6j2mP5VI1tiB0w0z70dczGbY6oq07i+BjwDUl/LOmPgX+m6jF3TLbX2n6l7VfY/nApO9v2QBl/0vYptg+2vcz2xp5lF9ne1/buthfavrtcbXWk7dfYPtT2+20/03yzp1bXf5S6Ht9M0HYb964/HRK2Z6q2c6rbt87J8c8CbwF+VIa32F7TdmCz1VR/IGLHTGZCiJgqdfY4APYF/s32J4Ctkha3GFM00O+HJD8uEd0xE7+Pda6q+u/AB4GzStFOwOfaDCoiYkfMxB/rLqmzx/Fm4ETg3wBs/wDYo82gIkYznX8UpnPsXbKj7Zj3YcfUSRxPl0tkDSBpt3ZDiph98kM29XbkPZht71+dxHGVpL8C9pb0buAfyCWwEZ0z2368YuqMmjhKP1BXUnVAeA3wKuBs2/9rEmKLUeRHopmpvNop71V96dplehj1Rj7blrS29A31lUmKKWawRauv476P/MpUhxERO6DOoapbJb229Uhi2st/bzPfTHqPJ3pb6qxvvK/ZtXavkziOorpz/F5Jd0i6s3T5EePQtQ9AU9M9/ok0k9tiut4flLvkJ8eYfU4Bx7ceRUypifjgz6YvT5e2NYf+munSezed1X0exwuGyQguKrPhwz5yG2fiNs+UbZop2xHjV7fLkWioy1+uLscWMfz5zOe0u5I4YlJs70cgPw7NtdVmOT/wfFNx8nwi19dm2yZx1FC3i+oufwlmsolq95n2/s207emamXKF1HgkccSs1+Uv8nS7IW7R6us63Z4xMZI4OmyqH8bTdTPpkE3EeD53U/VZbTVxSFouaYOkIUmr+8yfJ+nKMv9mSYtK+XxJN0l6XNInRixzZLmXZEjSx0u3KNFRXT9O3Ibpeg/Ejmq6jTOxTWZLr72tJQ5Jc4CLgBOAJcCp5bnhvU4HHrF9MHAhcH4pfxL4EPCBPqv+JPBu4JAyLJ/46GeG6fIhHDZb7yeZjJi71i514+lK3BO9N9CV7RqvNvc4lgFDtjfafhq4Algxos4K4PIyfjVwjCSVZ4v/E1UC+SlJ+wN72v5m6er9s8BJLW7DqJr8ZzndPyj9zMRtamoq22C2tP903M7pGHMTbSaOA4D7e6Y3lbK+dWxvAx4F5o+xzk1jrBMASaskDUoa3Lp1a8PQZ6+JONwwlZcJ7qguxzaaLsY9E2/qnA7bMBkxztiT47Yvtr3U9tIFCxZM6mtP1YdroneNp8OXZDqbjHMCU/0etnm+Z6q3bTJ0dRvbTBybgQN7pheWsr51JM0F9gIeGmOdC8dYZysm47/oLn1IuhTLROvqCfuZ3OZjmc57qW3o+va2mTjWAYdIWixpZ2AlMDCizgBwWhk/GbixnLvoy/YDwI8lva5cTfUO4IsTH/pzuv4GjjTd4p1saZ/nzLS2mE3nF6dand5xx8X2NklnAjcAc4BLba+XdC4waHsAuARYI2kIeJgquQAg6T5gT2BnSScBx9m+GzgDuAzYFbi+DNFhXe7KYiqfDBgxXbV6jsP2WtuvtP0K2x8uZWeXpIHtJ22fYvtg28tsb+xZdpHtfW3vbnthSRrYHrR9WFnnmaPtoUwX+XGJ0XTh0NpsuT8BpudJ/cmOccaeHI/paTp8SeuaSdsS0SuJYwp1+RBOTI0uXpEXMVISR0fli9xckzab7u07kfFP97YYaba1zVTEmMTRQBvdKE+HD+ZYZsI2bM9M3raZIj3yTr4kjhluJnyhcp/E1JjN7TWbt72OJI5xyIeqXWnf6LJ8PpM4Ypym05dnOsU62dI2M8tkvZ9JHDEtTMdr6yPqmI6f5SSOWWQ6fkAjonuSOGaIJIWImWH4u9zlvewkjqitSx/ciJg6SRwREdFIEkd0VvZwYkflM9SOJI6IiGgkiSMiIhpJ4oiIiEZaTRySlkvaIGlI0uo+8+dJurLMv1nSop55Z5XyDZKO7ym/T9Kdkm6TNNhm/BER8UKtPTpW0hzgIuBYYBOwTtLA8JP8itOBR2wfLGklcD7wVklLqB4jeyjwUuAfJL3S9jNluTfafrCt2CMiYvva3ONYBgzZ3mj7aeAKYMWIOiuAy8v41cAxklTKr7D9lO3vAUNlfRERMcXaTBwHAPf3TG8qZX3r2N4GPArMH2NZA1+WdIukVdt7cUmrJA1KGty6desObUhERDxnOp4cf73tI4ATgPdKOrpfJdsX215qe+mCBQsmN8KIiBmszcSxGTiwZ3phKetbR9JcYC/godGWtT38dwtwLTmEFRExqdpMHOuAQyQtlrQz1cnugRF1BoDTyvjJwI22XcpXlquuFgOHAN+StJukPQAk7QYcB9zV4jZERMQIrV1VZXubpDOBG4A5wKW210s6Fxi0PQBcAqyRNAQ8TJVcKPWuAu4GtgHvtf2MpJcA11bnz5kLfMH237e1DRER8UKtJQ4A22uBtSPKzu4ZfxI4ZTvLfhj48IiyjcDPTXykERFR13Q8OR4REVMoiSMiIhpJ4oiIiEaSOCIiopEkjoiIaCSJIyIiGkniiIiIRpI4IiKikSSOiIhoJIkjIiIaSeKIiIhGkjgiIqKRJI6IiGgkiSMiIhpJ4oiIiEaSOCIiopEkjoiIaKTVxCFpuaQNkoYkre4zf56kK8v8myUt6pl3VinfIOn4uuuMiIh2tZY4JM0BLgJOAJYAp0paMqLa6cAjtg8GLgTOL8suoXr++KHAcuAvJM2puc6IiGhRm3scy4Ah2xttPw1cAawYUWcFcHkZvxo4RpJK+RW2n7L9PWCorK/OOiMiokWy3c6KpZOB5bb/c5l+O3CU7TN76txV6mwq0/cCRwHnAN+0/blSfglwfVls1HX2rHsVsKpMvgrYMM5N2Q94cJzLTpaux9j1+CAxToSuxwfdj7Fr8R1ke8HIwrlTEclksH0xcPGOrkfSoO2lExBSa7oeY9fjg8Q4EboeH3Q/xq7HN6zNQ1WbgQN7pheWsr51JM0F9gIeGmXZOuuMiIgWtZk41gGHSFosaWeqk90DI+oMAKeV8ZOBG10dOxsAVparrhYDhwDfqrnOiIhoUWuHqmxvk3QmcAMwB7jU9npJ5wKDtgeAS4A1koaAh6kSAaXeVcDdwDbgvbafAei3zra2odjhw12ToOsxdj0+SIwToevxQfdj7Hp8QIsnxyMiYmbKneMREdFIEkdERDSSxLEdXeraRNJ9ku6UdJukwVK2r6SvSPpu+btPKZekj5e475B0REsxXSppS7kXZ7iscUySTiv1vyvptH6vNYHxnSNpc2nH2yS9qWfepHdxI+lASTdJulvSeknvL+WdaMdR4utMO0raRdK3JN1eYvwfpXyxqm6MhlR1a7RzKW/czVGLMV4m6Xs97Xh4KZ/070tjtjOMGKhOvN8LvBzYGbgdWDKF8dwH7Dei7M+A1WV8NXB+GX8T1c2SAl4H3NxSTEcDRwB3jTcmYF9gY/m7Txnfp8X4zgE+0KfukvIezwMWl/d+TtufA2B/4IgyvgfwnRJLJ9pxlPg6046lLXYv4zsBN5e2uQpYWcr/EnhPGT8D+MsyvhK4crTYW47xMuDkPvUn/fvSdMgeR3/ToWuT3u5aLgdO6in/rCvfBPaWtP9Ev7jtr1FdCbcjMR0PfMX2w7YfAb5C1TdZW/Ftz5R0cWP7Adu3lvHHgHuAA+hIO44S3/ZMejuWtni8TO5UBgO/TNWNEbywDZt0c9RmjNsz6d+XppI4+jsAuL9nehOjf2HaZuDLkm5R1ZUKwEtsP1DGfwi8pIxPZexNY5qKWM8su/+XDh8C6kJ85ZDJz1P9N9q5dhwRH3SoHVV1gHobsIXqx/Re4F9tb+vzej+Npcx/FJg/2THaHm7HD5d2vFDSvJExjoilM79LSRzTw+ttH0HVK/B7JR3dO9PVfmynrqvuYkzAJ4FXAIcDDwAfm9JoCkm7A9cAv2f7x73zutCOfeLrVDvafsb24VQ9SSwDXj2V8fQzMkZJhwFnUcX6WqrDTx+cugibSeLor1Ndm9jeXP5uAa6l+nL8aPgQVPm7pVSfytibxjSpsdr+UfkCPwt8iucORUxZfJJ2ovpR/rztvynFnWnHfvF1sR1LXP8K3AT8B6rDO8M3OPe+XtNujtqKcXk5FGjbTwGfoSPtWEcSR3+d6dpE0m6S9hgeB44D7uL53bWcBnyxjA8A7yhXZrwOeLTnsEfbmsZ0A3CcpH3K4Y7jSlkrRpzreTNVOw7HN+ld3JRj65cA99i+oGdWJ9pxe/F1qR0lLZC0dxnfFTiW6lzMTVTdGMEL27BJN0dtxfgvPf8ciOocTG87Tvn3ZVSTeSZ+Og1UVzZ8h+p46R9NYRwvp7ra43Zg/XAsVMdlvwp8F/gHYN9SLqqHXd0L3AksbSmuv6Y6TPETqmOtp48nJuBdVCcih4B3thzfmvL6d1B9Offvqf9HJb4NwAmT8TkAXk91GOoO4LYyvKkr7ThKfJ1pR+A1wLdLLHcBZ/d8b75V2uN/A/NK+S5leqjMf/lYsbcY442lHe8CPsdzV15N+vel6ZAuRyIiopEcqoqIiEaSOCIiopEkjoiIaCSJIyIiGkniiIiIRpI4IgpVvb5+YIw6J0laMlkxNSVpkXp6BI5oQxJHRDMnUfWkGjFrJXHErCbpjyR9R9I/Aa/qKX+3pHWqnqFwjaSfkfQLwInAR1U9P+EV/er1eY1f1HPPXPi2pD0k7S7pq5JuVfWslRWl7iJJ/6LqWQ3fkfR5Sf9J0tdVPYNhWal3jqQ1kr5Ryt/d53XnSPpoie8OSb9TyveX9LUSz12S3tBS88ZMNVV3HmbIMNUDcCTVnbk/A+xJdTfuB8q8+T31zgP+Sxm/jJ5nKGyv3ojX+RLwH8v47sDcMuxZyvYrry1gEbAN+Fmqf+xuAS4t81YAf1uWOYeqN4Fdy/L3Ay8ty99V6qwC/lsZnwcMUj1r4g94rgeCOcAeU/1eZJhew3AnYBGz0RuAa20/ASCpt/+kwySdB+xN9WO/vT6B6tT7OnCBpM8Df2N7U+k88E9U9XT8LFX32MPdp3/P9p0lpvXAV21b0p1UiWHYF23/O/Dvkm6i6iTvtp75xwGvkTTcZ9NeVH0wrQMuLTH8re3eZSLGlMQR0d9lwEm2b5f028Avjbee7Y9Iuo6qv6avq3os6euABcCRtn8i6T6qfpQAnupZ/Nme6Wd5/nd2ZH9BI6dFtQf0gmRWEtavAJdJusD2Z7ezfREvkHMcMZt9DThJ0q6qeiD+tZ55ewAPlP/K39ZT/liZN1a9n5L0Ctt32j6f6r/9V1P997+lJI03AgeNI/4Vqp5nPZ8qYa0bMf8G4D0lNiS9UlVvywcBP7L9KeDTVI/Yjagtexwxa9m+VdKVVOcKtvD8H94PUT3tbmv5O5wsrgA+Jel9VN1yb69er98ryeFZqh6Ory/1vlQOPw0C/zKOTbiDqvvw/YA/tv0DVU/qG/ZpqkNbt5auu7dSXRX2S8AfSvoJ8DjwjnG8dsxi6R03YhqSdA7wuO3/OdWxxOyTQ1UREdFI9jgiIqKR7HFEREQjSRwREdFIEkdERDSSxBEREY0kcURERCP/H3w2iCtaiThgAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "阀值: 0.040725835\n"
     ]
    }
   ],
   "source": [
    "#计算阀值\n",
    "\n",
    "# param_dict = paddle.load('model.pdparams')   #读取保存的参数\n",
    "param_dict = paddle.load('model')   #读取保存的参数\n",
    "model = AutoEncoder()    \n",
    "model.load_dict(param_dict)    #加载参数\n",
    "model.eval()   #预测\n",
    "total_loss = []\n",
    "datas = []\n",
    "#预测所有正常时序\n",
    "mse_loss = paddle.nn.loss.MSELoss()\n",
    "#这里设置batch_size为1，单独求得每个数据的loss\n",
    "data_reader = paddle.io.DataLoader(train_dataset,\n",
    "                        places=[paddle.CPUPlace()],\n",
    "                        batch_size=1,\n",
    "                        shuffle=False,\n",
    "                        drop_last=False,\n",
    "                        num_workers=0)\n",
    "for batch_id, data in enumerate(data_reader()):\n",
    "    x = data[0]\n",
    "    y = data[1]\n",
    "    out = model(x)\n",
    "    avg_loss = mse_loss(out,(y[:,:,:-1]))\n",
    "    total_loss.append(avg_loss.numpy()[0])\n",
    "    datas.append(batch_id)\n",
    "\n",
    "plt.bar(datas, total_loss)\n",
    "plt.ylabel(\"reconstruction loss\")\n",
    "plt.xlabel(\"data samples\")\n",
    "plt.show()\n",
    "\n",
    "# 获取重建loss的阀值.\n",
    "threshold = np.max(total_loss)\n",
    "print(\"阀值:\", threshold)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.AutoEncoder 对异常数据的重构\n",
    "\n",
    "为了好玩，让我们先看看我们的模型是如何重构第一个组数据。这是我们训练数据集第一天起的288步时间。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAD4CAYAAAAD6PrjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABRo0lEQVR4nO29d5gkVb3//zrVOUxOu7NpNrGRXTawZAEJwipBRQX0pyhXFESuV/0q6r1m8WK8KCgioIgIKEERlsyS47JszmF2dzZMnp4O07HO749THSZtYIaZ7t7zep55uruquurUdFW9zyeczxFSSjQajUajATBGuwEajUajyR+0KGg0Go0mgxYFjUaj0WTQoqDRaDSaDFoUNBqNRpPBPtoNGIzq6mrZ0NAw2s3QaDSaguLtt99uk1LWvNvv560oNDQ0sGLFitFuhkaj0RQUQohdQ/m+dh9pNBqNJoMWBY1Go9Fk0KKg0Wg0mgxaFDQajUaTQYuCRqPRaDJoUdBoNBpNBi0KGo1Go8mgRUGjKRTWPgDRwGi3QlPkaFHQaAqB4AF48EpY/8/RbommyNGioNEUAomIek1GR7cdmqJHi4JGUwikEtZrfHTboSl6tChoNIVAWgzS4qDRvEdoUdBoCgEtCpoRQouCRnOErNsboLl7hH37SSUKiXhsZI+rOerQoqDRHITOcJxFP3qad3Z3AmCakg/99mU++vtXR7QdXaEwANsPdIzocYeCaUraQlrECg0tChrNQdgfiNIejrO1JQTAznb1cG7q7BnRdsSiyjJJJkYv0NwajCGlPOztl63bz6k3Pkd3VLu8CgktChrNQYglUwBEYkkA1jR1AVDlc45oO5IJy11lDp8oPPB2EysaD8/y2NvVw4k/fZY3dg6yfSzYb2Dd3s4eogmTQESLQiGhRUGjOQixpAlAOK7EYU2TevDVlLiGtN9Xt7WxzbI+DodkOpaQHL4H7Nf/sZpLbn3tsLY9EIiSMuXgsZRHvgwPXNlrUfp/Fk2khtROzciiRUGjOQhpUYjE05aCEoWw9fndYJqSy29/g/NvevGg20UTKW5/aQcpU5JKWKIwTJZCysy6gYKDuXe698GT34FUMnP+6f9HPwJ7oX1rr0Vp66pHi0JBMSyiIIS4UwjRIoRYN8j6M4QQASHEKuvvu8NxXI3mvSbZE+Qux//i7m4EYOP+boAhuUTScYlE6uD++V8+tZkfP7aRJ9cfwEweeUqqlJItzcEB13VG1P4+YLzFhteeGHgHW5+G126G9m1ErF5/PFcU/m8ePPEt9T4RgVBLr69nLYVBhESTlwyXpfBn4LxDbPOSlPI46++Hw3Rcjeaw6Y4mevWQDwd7oJHTbWsY2/k2PfEUkXgKh00QjCX55zt7eWLd/iNux5qmLj5ovM7xzoPPr97YrkpbGAJSVkxBmIcvCo8/cAftN5/LpsamfuvaQ3EMTH7m+AP1b/1k4B2kS2tEuzKWQi9R6NoFr/9OvY+H1PZbnoRXfgOA2dPFhcar2n1UYAyLKEgpXwQKJ1dOc9QRTaSY9/2nuGHZxiP6nhlXWUb2eBddPap3PanKh5Rw4xOb+NMrjUfclt3bNnCT42audjx20O0CPUoAnHYD08o6EodrKex6laXrv8ZJtg2k2rb3W90ejjFfbKdMRKiPbIbYAPGNuLWspytrKaQG6PWbJsQtAfnbx+Hp/4ED6/j0nu/xG+fNENhzeG3W5AUjGVM4SQixWgjxuBBizkAbCCGuEkKsEEKsaG1tHcGmaYqddCzgiXUHjuh7KUsUXPEuOsPqgTyp0guodNV3E1uYtf1O7MKkLHXwflS3JQrRhEkqqWIKh20p7F+deWtLKHcVbVvBVA/39lCc04y1aj0mNL2ltgnshZ0vqffpB31PJ5GY+l4s7Qoyc8Shc2fWqkjz2s1Mj6r9x2O6iF8hMVKisBKYJKWcD/wW+OdAG0kpb5NSLpZSLq6pqRmhpmmKCtOErv490zd3tgMwvc5/RLuT1oPRneyiy/LDT7BEASAcOzLXSEvTDs7oeRqActlFY1uYxrbwgNt2WXGLnngKaYmCcbiiEM/2/M1oEJZ9A25eDJuUddIZ6uFs29s0uyaRkoLOjc+zbm9AxRDuu1x9sZf7KG0pWOebyg5KSza9DfE+57DuQZzErU1HdkyHZmiMiChIKbullCHr/TLAIYSoHolja44yXvk1/N9caO/tMnmzUY1INoQ4ot3JhHqgeZMBOq2HdENVVhSC0SOzFHY+8lMEkk2lJ1NFgP+8fxXX3ffOgNum3Uc9iRTSCjQftqWQ4w7ytqyAN/+gPnTvA2DB6h8wz9jJlsmfZq2cTMubD3DRb1+Ank6IdUMiikw/6Hs6iST6xBRySnjvX7McyMZqVprTelVzTcb7WBGavGZEREEIMUYIdTcKIZZYx20fiWNrjjIaX1GvHTszi1KmZOUuJQppl8zhkhGFVHevmEKacKy3KEgpewdjLRIpkytufZ55zf/knbKzidcdR7kIs21/B+v3dWcCubn7SadyRhMppBVLsMnDa38yms06clmZUwChYCdIyazWx3hEnEl47if5Q/ICZhhNXGZ7Tg1CA+jpoHG/yibq6mjJuI/S55aIZ0Uhvn99r2M/ljqx12dtKRQWw5WSei/wGjBDCNEkhLhSCPFFIcQXrU0uAdYJIVYDvwEulUcyXl6jOVwcHvWayLozWoMxQtbDOzCQKGx7Bl7+9cD7s0ShxOzOuHMm5lgKPYlUJqNpRWMHx/3waY7/yTNqJHQiCi/8DJIxNu7vxrb7RTwizpylX0D4awHwJ7tImZLVe3qPBu6MJPDRw3/aHiQei2UsBcM8PMskHAzQKZWrzBXOZkjt2d8MiR7sMkmLayJjyjw8bi7hHXMal9qWKysBINJOJKTed7W39As0x3qyvf+SeO9U1NfN2STdVZnPZkKLQiExXNlHl0kpx0opHVLK8VLKO6SUt0opb7XW3yylnCOlnC+lPFFKObLVxDRHD06rF5/zIGoPK/93mccxsCis+Qe8+MuB92e5SUplN53hOB6Hrd9o5nSw+bG1+wn0JAj0JOgIx2HXK7D8J7D7dVY3BTjTWIXp8OGbdir20joAphj7KSXMSqvgXpoDgSj/Y7+b/3I8yJjWlzI+fEMenihEwwFaZRkA7p7mnBXdEO0CQLpKGVvmBgTbzHoqRJBIUK0j0oHfUEJkRlRK6iKxmXhC/f/i0ez/tzzZ1uvYu2Utwcq5mc9aFAoLPaJZU1xkLIVsT7YjrB5uk6t9AxdnS4QhHhwwLVMk1QOtTIYIRGJUeB34nXZyQxNpF1JrMBt8DfQkaOtUD/r2ri7W7O7kLPtqxNQzwO7CWTYGgHudP+E3jpsz7q00zd1R5hnKBRY2XRkfvf1Q7qN4BDp2kIoGCeEhLF24Y+qh3SLLMeLdmRpFhreCar8LmyHoxkcpEboDKiMqGW7HaVouomgXZeGdPOj6AdMDqixGPKb+vxHpwolqkykFnbKEIF72lc7LNEnGtSgUEloUNMWFo7+lkCsK0YSZKXKXIR0IDTXTF2FZCjYhCXZ3UO51YhiCUrcjs01aFHLLRAciCQ60qQd9c3snzXu2MJY2xJQzAfBUjM1sO9vWlBnlnKapq4fJQrl9zGQ0Mz7BZlkKLcFov0Fh0USKxF0Xw28WYMTDhKSHMB4MTEwMDsgKbPEg9HQBYPeWYzMEdSUuAtJHiejBnbBGbLc3Y0uq/4sj3oUvqlJ5vXEVCkxYD/p2UZ45/sPmKfwtpc7v+YpPcGX8a2pF33RVTV6jRUFTXDjc6jWn198eyooC9I8rtHdZvfRg/9HJRk6WTU9nCxU+JQalHjsuI4WBScgKwrYGY0y00lW7ehIkrTZEQt34Oqxg7LiFAPgqs6JQTQfRnt696Z0tQTzCyuCJR7KWAglMU3LBb1/munt7Zy19/5H1OPa+AYAn1kqPcBOS6v8RMXx0Sy/2ZIhkRJ2vy18JqBTbblS7y7FEoaMZe0q1yZMK4YgqC8KZVIHohDX2IGCryBz/z8nz+HnyUgB2BEzeMacDWWHVFAZaFDRFxZ529SCOhrIDwzrCcQxB5oHdNwMpElIPOhnsP7DNlso+0GLdrZR7VMnsr587g1Xea3nC+c0cSyHO6eUt/I/9bgKROKmo6iF3dHUxWzRiChvUqnGbJSVlmf0aSMpivQUpeCAnpTbRg2EVwrPJFDvaQjR3x3hqQzOvbs/687fsyyb0lcRbSNh8RFDutG7pJYgXZzJEJKC2c5eqYPAvPjafi0/qPZ60J9CKw7RcZ4SIdatgsssShWTafeTMZpZHyMZa9nRG6MEqL65FoaDQoqApKtbuVg/JzvbsiPj2cJwKr5Nyr+rlB3p6B2vTPeJIe/8aQbmi4El1Z/Zx0XHj8CQDHGPsJRRLEkumCPQkOFus4Er748S7WzAtt1QsEmKOaCRSOi1jyRhG7/ESNakDJHJKSNS15ZS0TvZk3Ed2Eqywxly47Ab3v5UdqLfIlW2/gUnS7iEilCh0mW6C0osrFSISVIJZUqZEYUKll/oxdb3akwiqmEJKChwixQSh/p/ulBLdpGUpxN3ZQaYRyyoBaOqIELVEQVsKhYUWBU1R4bFZD9Z0aiXQEY5R6XNS6lEP9L6WQrpHHOnY129/NjNGQtoAqCRIhdfq/eYMyArHkhkXVa1TxRUS3a2Y1uCveE+QuUYj0erevfFbHZ/mfq8aPTxBtBKyBsLFW7bzxdifaPVOA1SwOz1ozSGTrNjVSZXPyYwxJb1cYeNCvYsUp+x+opYoBEwfQbx4zDCxtCiUZ9NGPaVVvb5rRNpwyRjthlqejm940qJgFegzfbWZ76QtBZ/Txr5AFIlBTNoxUloUCgktCpqiwm0o/77RSxTiVPmdlHnSlkJvUXBZWTbJrr399mc3Y7Sg/OblIpRxQdGVrXAajiUzmUelKCFIhdszAdbS6D5qRRfJ2mN77XvnjM+z97j/JGU4mCBaM6Oju1c9jF9EeeckVW3USEaxWe4jB0lWNHawcFIFJW57RkgAxsQae+1fOrxEDdXeIB6iNh9e2UMy1E5YuqgszZb88PYRhZK4CroHnMqCmCaUYHpMJQrpmlC2kqyF0WOJwuSa7OC+uHBqUSgwtChoioq0KNjiWVFoD8ep8rkyotA3LdUtrYdWsH/2kd2M0ikqMKWgVIQ5s6od/v4ZeOlXmW2COaLgk5YFEenIZEBVJlQv214+vte+b7xkHl89dyZRbz3jRQvBmGpXd0czCWmjdtJsktixp6IYViqqTUh2t4eYNaYEn9OeGZQH4EyF6KAk81m6/EQNK6aAD8Ot4hi24F4C+HpNKWrzZgPG3aKEmpRyF7W4pwAwwVCffZYomJal4LKyqBLSRhw7AFOqs2ITFy5sOXWSNPmPFgVNUeEUyn1kT/S2FCp9zkwaae4EOYl4DIdQQuLssUbmJmOwaRkADjNGwuamGy/lhKh56BOw4Z+w9u+ZfYRjyUw6qtt6aIpoB4ZlKdRI5a5xl5QP2OZ4ycRelkIs0EoXfibX+EkYLmypHmw5I5kdJCn3OvG77b1qL7lTYdrtdZhSxSsMVwlxy1Loll7sXmswW2QfQenLiKRamA18d7vq8QslaC3+Gb3a6pPKEjKtmeB8VeMAZSVUeJ3YDMGSyZWZ7ZOGC7u2FAoKLQqaosJhDaRyJi3fd8qkK5Kg0ufESRKPw8g8wKOJFM3t6oEdlzaqorvgjg/AO3+F+y6D1s04ZAxpdxOQPqa5uyF0ANzlvY7ZE41lLAVnQmXnOGKdmSB1regCwO2vYCCkfwy1oivzgE+FO+gWJZR5HEoUzFivmkcOkpR5HJS4elsKbjNM0llGF8p9Y7j8xO3qfRBv5vgl0X1EDH/vYLfDS8Lq6SfKJmUWp9yVtNmycYOsKKhzK6tV1k8EF5OrldB84vgJme1NmwuHqS2FQkKLgqa4sHrUrmQIpMxUNq3y2eGm+Xyr5jX+tXofoViSM3/xPB+96RkAfpe6iOfdZ8Ge12HVPWpfgT04ZQy7y4enrJoTSq3xDMdd3uuQiZ4g+wJRyjwOjJgaLeyMd2FYWU1uYWUOecsHbLJRUksVAUJRqxJqtIOYQ22bNNw4zGgvUVhsbKbKFsHvVqIgpSRlSnwyguEqoVMqF5LdU0rClrUUvKVKFHypbmL2EnohBBFDCYgcvyTbNpefNndWJPxWzCSdZlpZU48pBVHhpr7cQ43fhcNm8O9rT+XqM6Zi2j3YpRaFQkKLgqaoSM83YCMF8XBmUvoaWwiC+zhvbIiuSIK/vr6L/YEoXqEeWO2uCdxiXqJ2svdt9dq9D6eMY9rc1NbUYe+yKq9OPh3Kc3rTPd281djBcRPKVW0hwJPowtHXbeIqHbDN9tI6nCJFLKRExx3vwnSrB3jK5sFpxnqVt/iz8+ec8sR5fH7Vx/gv4z6iCZNwPKlcPu4yAkI98J3eEpKWpdCNF39ZNpiccPQRBSBqU+1zTD45s8zm9tHtmwxAqyzFSwyScUhESUoDl8tNSHhJGB6+vXQWN1++AIBjx5fxzfNmkrK5cWpLoaDQoqApKkRuFdFoIDMJTnlSDdiqdSWYUu1jTVMXgHrIAbWVlbwdLEX6ciZ36t6PS8Yw7S7wlEN6LgNfNXx2GSz9BQBtHR1sawlx8pTKTF0hn9mNw+wjCu6BRSFdBykVbCYYTVAigxh+NSgsZXfjkjFsMklSZm9XR7Sd8p7dXGv/F8FYgnAsSQk9SGcJEZuKDzi9pRlRiBl+PP5s3CDlKu/XDo9lSZROWpBZZnf7mTTjOAACnokAyGgAmYoTw4EQgrDwkbB5qC/3ML2ut9iYNjdO4uiiyIWDFgVNUZEe+QtAtCtTwbQsZY32jYUo8zoy/nsP6sHdMLYGUwqCNQuz3+/ei5s40uYBT048wFsJZeMz1kJLm9r3KQ3+jHBUEMSWypauSGAHe3ZwVy7OMiutM9TKztYQ5QRxlypRMG1uPEJZCj2i//ebZDWhaJJwNI6fHoS7hKjDCij7SklZtaCSzhKcJdnRx9LTP75RWl4DTj+lfk+2bZ4S6o5R7qRIxSwA7nx2FcFQiIRQgeoeRwXSVdZvfwDS5sZNnNgAc0xo8hMtCpqiQphJotLKqgnuz5SgKIlb5SBiQUrcDrotUUi7j46ZoB7Mu/zHIRHE3dWY3ftwEUc6PL2Dy17r4WqV6fYKJSyzKrIPvnJCuMm6TSKGDwab9c0aAGZEWthzoBWnSFFSoZZJuwcXcRwkMwPRAMyaWYRKp1NDF6FonEgoiCEkhqeUhEs98D3+Mvb4j+PPyXNpdM/GXV7HtfEv86PEp9gz+eP92+EuA6cfkdNOp8cPE46HL73J3upTAEi99ScINBG3RiyP+/TtTP///m/AU5N2Ny7i9MSPbNpSzeihRUFTVBgywW5pZcsE9hK2HkbetCjEQ5S47Zn5lj3Wg3tKfQ0Om+BJ7wd56X1/44XwROLtu3GKFNLuzloKNie4LBeJS+Xj/3TpZO79/InYrAFzCVcllSKY2TdA1DjI3NDWhDuOnnaam9WYhvIqJVLS7sFDHCdJYkZWFIylP6N15idxiSSxrhaiVjzC5i6jxzOWqHTgK60AdynfT16B3eOnxG3nUfMk7kgt5dwT5vdvxwlfhHN+AMAd3iutU7TSS2tmYFrWwFX2xzjHtjJjKbjGz8NZN6P//gAcbtwiTrRvZVpN3qJFQVM4/O1SWPmXg25imEmapHIFJTr3ELEsBXfUGoMQC1HqdrA/EOU620Pc4LgDAIfbz5RqP5ta46yS02mWFTgCKrAsHB4VUwDwVmV7/E71oJ9UYnLS1KpMaQ1Z0UAZYXzkTFlpP4goeCpIYeCKthEJqHY60q4epwcvMRwkieeIAu5yDGswXLJrN7GwimXYvWVsHvcRlsZ/it9fgsuubnG/y54Zp1HhdTCmbABX1sQTYL6qcvpyzaU0RO/B7csZDNcnJpIUTg6J3YObeGbmNk3+o0VBUzhseRwe+fJBN7HJBD04aaGcROeeTB6/s8cqkBcPUuq2E0+afNXxAFXCmpPY6WN6nZ/NzUH2B3o4ICszpSWwu7PuI2/WL58WBeJWmW4ryOyonoIhJC6RxEQJSOJgomDYCBpleBIdJIJW7MNj9dDtHvyiB0NIkrbsNKC4y3BUWuMBAntJhrsAcPnLqa0sp8kYT7nHicuRFYWaEhc/vnguT37lfQf9HwJU+12AwOe0ZZYlvWN6bZM0Di0KHp8fD3F29ZkvQpO/aFHQFAbm4QUqDZkiiZ39sopUZ1Omh2oPWyUsYkFK3Pb+X3R4mVFXwp6OHra3hDlAdlSucHqz7iNfTo0gy32UmbvBEgVROzOzSchQveuks38KaC5BewX+RIeqmQQqmA0YTm+2npIjRxQ85birVKDbFtxHyjq2y1/O5Usm8vCXTsbjtOGyq4e63zrnT504idrSgQPeuVRbU476XNn/lfBWMDP6J940lavocCyFyrJSPCLO+qbAIbfV5AdaFDSFQW79nPjgM3nZZALD7mSfrCTV1UQ4lsRlNxAha66EWIiSnFnTMjh9mXTKlbs72WaOy6wynH3cR2kcXkDkWApd6rU+m8EUtisxMQ8hChFHJSWpTkSPNQ+EZSm4vX5sQqVzmvZsoTmcJfjKa+iRTpzhvSR7rPER/nI8Thtz6pX/P+0+KnENIIQHYUq1D4/D1qsUhstuI4qLNmvu55ThGuzr2e94VJs3720/xJaafEGLgqYwyK3J37pp0M1sMonL6SLsGoOnZz/hWAK/01BTbQobpGKUuQbImTdszBijHtxJU7JKTiUolQ/fboiB3UdCKBeSVSI7PXCNscdlNok7lSjIQQaupUn56qgzm6mN7SYpHBnLpLI8m+opnTmiYBi4HHb2U4UrciBzbKe3d2qo29HbUjhcPrJwPC/8vzN6WQppgUmLQowBxLUvdvU/3HGg7RAbavIFLQqawiCZYym0bBh0M5tMYhoOPDWTcMkYqUgH410hVf6iogGAciOOQX931MRKb+bBB4JrE9cBYB8zS7lzhAElvSejwemDmBWX6OkEmyvj+gHoscpVCPfAefxpIpPOpFp0c6nxLHtqTgeb9TC2Z4PLIdm/Z94uKvHEWjNt6HucbKD5MB7gOdgM0c/N5LT21WqJQiJ1GAPSrEmF2joD/arTavITLQqawiDHUti/5e1BN1OiYKdu/FS17a7tTLZZrou62QCU2aK9MoMy3zUE02pVnKC+zM0L5nyWGPdzzLyT1MP/Uw/Cos/2/pIrx1IIt6n0UiEwrYd53ViVIVRaXs3B8B57IZ3Sj0OkaJt8UXaFIysK42r77yNoK8OT6ETEulVQ29k7oJ0VBVu/7x4paVFow3JNmYcRPLb+D24RZ0erDjYXAloUNIVBjqWwZv3aQTezyyTScFA1Sc1yVhnawiTDcl3UzQWg1IhSwsBxiWOsuMK88eXqdVIVtnQ10anv72UFAOohvP4heOUmCLeqEhiAUaIydSpq6gGor6vlYDSMqeK+1JkckBWY087OrsgJLo8fYB8RezmeRID29jY1uM3ofUu73qX7aCCctt7uI8/hiIJlWU0QLSRTelRzIaBFQVMY5FgKY43OQTezkcQUdioa5tElfSwxNjFOWGMUapWlUCKimfkCzDP/Gz7/XOb76bjCnHoVAzhrVh93UV/atqjXp79riYJVO6lETT6TeainA9WD4HXaucf7ac6M/ZKa8pz4Q46lIBpO6fe96tp6/GYQZzKI3dPfRfVu3UcDkbYUglbw3C8PQxSsoPsCsY2UqesfFQJD7z5oNCOBZSk0y3LGio6Bt5ESOymkzUmFz8WzciZLjE3sNX0qQOxXD3gfWUvBGLcAxi3K7OLyEyYyqdLLuXPGMHdcGWfMqBnwUBkWfRZev0W9DzRBnTUP87Efhd2vwrSzletp2jmHPMXJdWU0dSeoKcmJHeSIAhWT+31nyZxjMPZIlpS04yyp6rfeY1kKA6bhHiGGNWjP8NdBBGoch1H91FNOpGwaCzq2oTWhMNCWgqYwsERhl6yjUnZiJnOCljtfghd+DilrmWFHCMEm17FMMQ4wNb4RKiZlxhW4ZYQSy1KgTyG3UreD848di80QnDmztlcdoAE57wa46HfqfaQt4z5i8ZXw1Y0wZi4s+Xwm4HowZo0tpcLrwJ+bPpp2m007Jxt8tmVFI11NdWJ8O5RlJ7dJs2RyJdefP5NFkwae4OdIsLxH1NWr4ziShxcjCFUfxwJjK+ZhjjXRjC5aFDQFQcqa6avZNhabkHS0NGXWdbx6F8kXfgEpNQLZNJSrZE+pcl3Ux3ZA+cRMzSJbPJTt5boOPn7gsCjLjmnIuI+EgNL6I9rNdWdN56FrTuktRFNOh2M/DhfdkhWDGedn16dTZJNRVbm1D26HjS+ePhWHbei3+rTaEm791EJ+8vElsOQquOKxw/pepG4hlSKEs7txyG3QvPcMiygIIe4UQrQIIdYNsl4IIX4jhNgmhFgjhFg40HYazWAkYsrdE/apXmrXgV2AmlJz5aZt2M0oWHMiY4lCuHIuq0yVhURJfTYz55Frucr4p3o/yBwHR0TpAKLwLvC77Eyu9vVe6C6Dj/5RBWydXrh2BXz4D9n1uYPpyvtbCsPNeXPH4nXaYenPYYAYx0Ak/Or/Y+vRYxUKgeGyFP4MnHeQ9ecD062/q4DfD9NxNUcJ8ZgVGC5vACDUuhuAu1/bRbWwCtGF1UNH2pQojC33cFvyg2oHvqpeVsF0qURlsNnQjohci2AIonBYVE/v7Yry5aSpDmAp5ANCWOmwpi6KVwgMiyhIKV8EBon+AXAR8BepeB0oF0KMHY5ja44OElElCq7aaQDEO5X76K3GDqpQohAPWj1RSxTqSt0sM0/gyeNugROuzixPI4WRmRNhSDh92RHP77Uo9CXXUiibOLLHPkyETYmC1DGFgmCkYgrjgD05n5usZRrNYZGKK1EoqZ1EXNowA/sAaA3FqLIshXi3lXpqVe9U5aEFgXGnK9cLwMwPZfzwQpqDT3xzpKR76SMtCjaHcjHBiLiP3g3CUAFyqS2FgiCvAs1CiKuEECuEECtaW1tHuzmaPCIRV4Fml8dHm1GFPawK3AW7A5nZ0xJBdc0Iu7IIxlhlGry5o3kvvQcuunn4G5h2IXn7p4W+53ir1OQ/voMPkBsthJG2FLQoFAIjJQp7gdxuzHhrWS+klLdJKRdLKRfX1Ixwj0uTf5gpWH4DBJszloLL5SVoK8cd70BKiRnKdh7MkOU+sgLNx00o56vnHMPpx/S5lqqPGf62Vk5VA9bshzHxzHDjrVbBbiOv+ngZ0u4jpBaFQmCkBq89AlwrhLgPOAEISCn3j9CxNYVK21Z44UZY/09SYz4AgMvjIWIroyzZSTCWpCTVlbmKzXDvmILdZnDdWdP777d80vC39YxvqvEIo8GcD2eL8uUhRsZSSI5ySzSHw7CIghDiXuAMoFoI0QR8D1RdXSnlrcAyYCmwDYgAnx14TxpNDml/f9tmZOWpxKUNj8tBp72M+sQuWoPZeAIA1gQ1wnaI3rrtPegLeSqyE/GMNCddMzrHPUx0TKGwGJa7Q0p52SHWS+BLw3EszVGEzGarVO9/nhhOPA4bza4KSsLd7OwjCqLHEgX7YdT5+fJKsB96khjN0DHS7iOdfVQQ6NpHmvwlRxRKg9tpoxSPw0bCWY6XKG2BINVWOmpSGtisWcsOaSkAVE19T5qs6Y8ONBcW+RmZ0miglyiAmunL7bSRcis3TbCjhUrRTcrupYNSnHFVPdUYjWCvZlDSooCOKRQEWhQ0+UtfUZAOVfXT8t0HOppVGW1fLUHpwW2JwmG5jzQjhpGO4ejso4JAi4Imf+kjCgkcqrCbNRagq72ZY227oW42QbzYpSqIZzsc95FmxDAygWYdUygEtCho8pe+oiDUw97wWbOfde5mgtyHUT+fINkZyoRDi0I+IazxEzqmUBhoUdDkL9KalcUajJa0ylfY/Wow2ozISgwkon4BPSJbw0jHFPKLdExBaPdRQaBFQZO3JFMqMJnyKHdR0rIU3KWqdtGpxhq14dj59NiyoqDdR/lFOqagLYXCQIuCJm/Z1hwAoCmmpqRMWwoen58e6aRGBAg5qqFkDDGbP/M9m3Yf5RVGuvyG1DGFQkCLgiZv8TnU5dmcUg/8lKEGm/lddlyoqTf31Z0OwBbnnMz3DJ19lFcY9nQdEm0pFAJaFDR5Szpb5UBSiYK03EIlbjuGUPGGfXOvBmB1yWl8NnE9f0h+EDFa5SY0A5Iuc6FTUgsDPaJZk7dIy93QLtXsaKYtayn8KPFJ7JicPUaNTPY47SxPzWM587h/GOYj1gwftrQo6JTUgkCLgiZvSQcmO6SaRlNaouB12rjT/CBSwmV+a5kjO2eCXYtCXiHSv4e2FAoCffdo8hZpKhdRJ5YoWAXshBD4nao/U1NiiULORDpOLQp5hc2mYwqFhLYUNHmLtHqWafcR9uyE9X63nZSU+FzqEvY6cy2FYZpiUzMs6DIXhYUWBU3ekg40d8hSUlIgHdmxCD6XHac9axF4ndlL2aFFIa8wMgXxtCgUAloUNHlLOtBsuHx8Jn49M0pP5kxrXanbjs3IPvyr/dmxCfY8nZbyaCU7olkHmgsBLQqavCUdaL72/dO5dWsJZy7IzoHw7aWzMHJEYdGkysx77T7KM4QgJYV2HxUIWhQ0eUvafeRzO7n7yhN6rVvcUNnr87zxZZn3Dh1ozjtSGNp9VCDou0eTt6TdR+Iw3EG5QqBFIf8wMXRBvAJB3z2a/MWyFIQ4vMv0A3PqAHA79GWdb5gYGZHX5DfafaTJW0yrZylstkNsqbj58oXsbAv3ykTS5AfKUtCiUAjoLpUmb0kPXjtcS8FhMzimruS9bJLmXWIK7T4qFLQoaPKW9OA1Q6eYFjwpDF06u0DQd5smf8kEmg/PfaTJX3SguXDQoqDJX44w0KzJX0xtKRQM+m7T5C3mEaSkavIbEwNDWwoFgb7bNPmLZSkY2n1U8Jh68FrBoEVBk7dkah9pS6HgMYWBQLuPCgF9t2nyF+0+Khp0oLlwGJa7TQhxnhBisxBimxDi+gHWXyGEaBVCrLL+/mM4jqspbtIF8XT2UeFjYtOD1wqEIQ/9FELYgFuAc4Am4C0hxCNSyg19Nr1fSnntUI+nOYqQavCajikUPnrwWuEwHJbCEmCblHKHlDIO3AdcNAz71RzlZAev6VLYhY5KSZWj3QzNYTAcojAO2JPzucla1pePCiHWCCEeEEJMGGhHQoirhBArhBArWltbh6FpmoLG1JZCsaBjCoXDSEXw/g00SCnnAU8Ddw20kZTyNinlYinl4pqamhFqmiZfyVTV1IHmgkcKA0PHFAqC4bjb9gK5Pf/x1rIMUsp2KWXM+ng7sGgYjqspdqxAsyG0pVDomNh0SmqBMByi8BYwXQgxWQjhBC4FHsndQAgxNufjhcDGYTiupsiRlg/adpilszX5ixRCu48KhCFnH0kpk0KIa4EnARtwp5RyvRDih8AKKeUjwHVCiAuBJNABXDHU42qOAtIPER1oLnh0SmrhMCyzkUgplwHL+iz7bs77bwHfGo5jaY4ipC5zUSxIYWBDWwqFgI7gafIWqUWhaFDjFLSlUAhoUdDkL1ZKqk2LQsEj9XScBYMWBU3+kpmjWV+mhY4pbBjafVQQ6LtNk7+ky1zoSXYKHokep1Ao6LtNk79IE1MKXeaiCJBCj1MoFLQoaPIWKU1MBIbQolDomELPvFYoaFHQ5C1Ci0LxIAwEuiBeIaBFQZO/SFP5orUmFDx68FrhoEVBk7do91HxIIWhs48KBC0KmvzFEgWtCYWPFDYMHWguCLQoaPIXaao6/FoVCh5dOrtw0KKgyV+kiUQLQjGgLYXCQYuCJo+RmFoUigMhtCgUCFoUNHmLsLKPNIWPFDbtPioQ9B2nyV9Mk5S+RIsCqWsfFQz6jtPkMTqmUCyolFRtKRQCWhQ0eYuQKUydeVQc6EBzwaBFQZO/SKljCkWCmnlNi0IhoO84Tf6iU1KLBp2SWjhoUdDkL9bgNU0RYBgYuiBeQaDvOE3eIqTUlkKxoC2FgkGLgiZ/0e6jokG5j2RmNj1N/qJFQZO3CExMPRVncSBs6tXUYxXyHX3HafIXbSkUDTIt7nr2tbxHi4Imf9FlLooHQ1sKhYK+4zR5iw40FxFp95G2FPIeLQqaPMbMuh00hY1h/Y7aUsh79B2nyVuENfOapgjIWAo6LTXf0aKgyVsEOqZQNFgWnzSTo9wQzaEYljtOCHGeEGKzEGKbEOL6Ada7hBD3W+vfEEI0DMdxNUWOlEhdEK84sCwFM6XdR/nOkEVBCGEDbgHOB2YDlwkhZvfZ7EqgU0o5Dfg1cONQj6spfvQkO0WElX1kaksh7xmOO24JsE1KuUNKGQfuAy7qs81FwF3W+weAs4SejV1zSPQ4haLBshRS2lLIe4ZDFMYBe3I+N1nLBtxGSpkEAkBV3x0JIa4SQqwQQqxobW0dhqZpChkhpc4+KhYy4xR0oDnfyas7Tkp5m5RysZRycU1NzWg3RzPK6EBzEWGlpKZS2n2U7wzHHbcXmJDzeby1bMBthBB2oAxoH4Zja4oZHWguHiz3kc4+yn+GQxTeAqYLISYLIZzApcAjfbZ5BPiM9f4S4DkpdblEzcExtKVQNAhDZx8VCvah7kBKmRRCXAs8CdiAO6WU64UQPwRWSCkfAe4A7hZCbAM6UMKh0RwcaYIY8iWqyQcyloIWhXxnWO44KeUyYFmfZd/NeR8FPjYcx9IcPehAc/EgdEpqwaDvOE3eIjB1TKFIkJYoSO0+ynu0KGjyFoHUMYUiIW0paPdR/qPvOE3eIqSZqZmjKWx0oLlw0HecJm9RloJ2HxUFQscUCgUtCpq8RUg9n0KxIIx0lVRtKeQ7+o7T5C0Cqd1HRYIwVKKjFoX8R99xmrxF6IJ4xYNlKeiYQv6jRUGTt2j3UfEgMgXxtCjkO/qO0+QtAom+RIsD6fCpN/HQ6DZEc0j0HafJWwS6IF6xkHBXA2BEdEn8fEeLgiZv0eMUioeku4KUFNgibaPdFM0h0HecJm9RloK+RIsBw7DTQQm2Hm0p5Dv6jtPkLQYm+hItDmyGoE2WYT+IpbBxfzcrd3eOYKs0A6HvOE3eosYp6JhCMSAEtMkytjfuYNWergG3+d4j6/nWg2tHtmGafmhR0OQtOiW1eLAZgjbKqCbAyl39rQEpJRv3d7O3q2cUWqfJRd9xmrzF0CmpRYMhlPuoWnTT3B3tN16hqbOHYDRJKJakO5oYpVZqQN9xmjxGoLOPioW0KHhFjEBnK/x8Kjz5HbUy2o3j4c9xg/12QLJPWwujip7rUJO36Oyj4sGwYgoA/va10NMJr90Mx10OT3yLMXte4HI7NMka9nctYeaY0lFu8dGLvuM0eYuhA81Fg2HFFADGhNZnVzzwOdj5Ag9VXcXLcj6X259lX0BbCqOJFgVN3qLdR8VDZziesRSmxjaqhYs/B62bwObk3sTpNFcsYrxoo629fRRbqtF3nCZvMbT7qGiYUuNjl6wFYAnr1e961veQ/jrk3I+wMeAgXjVDbdyycRRbqtF3nCZv0ZZC8TCttoQ1N1xCyN+AT8RI+sZiusq43P4rfiK+QCiWxBgzFwBv5+ZRbu3RjQ40a/IWQ+pJdooJwxBEa+bjDzUS9tazqbGD1w4I1nWq0hflY6cQE2783VtpD8WIxFNMqPSOcquPPvQdp8lb9MxrxYdt3AIAupxjefDtJgCCMTVv8/hKH8mqGUxKNbLox89w2s+WI6UctbYereg7TpO3GNp9VHSUTFkMwK5UNY+vO4DflXVWjK/w4pt6Ekts26hFjXqOJc1RaefRjL7jNHmLgS5zUWzYxy9ik30mf21pIBRLcsmi8QCUuO2UeRxwwhexC5M7p70MQCyhRWGk0XecJm8xkAgtCsWF08vdc27n6fA0AC5bMhFQVgIAlZNh7iXM2P8vBCY9CT1950ij7zhN3mLomEJRMnecGq9QU+LimDo/U2t8TKn2ZTdoOBVHKsIk0UxUi8KIM6TsIyFEJXA/0AA0Ah+XUvYrgSiESAHpmri7pZQXDuW4mqMAKTGEFoViZG69EoWFE8sRQnDnFcfjcdiyG4w5FoDZYpe2FEaBod5x1wPPSimnA89anweiR0p5nPWnBUFzSEzT8iXrMhdFxzFj/Iwr93D2rDoAJlX5qC11ZzeomYkpbMwydmtLYRQY6jiFi4AzrPd3Ac8D3xziPjUaTDOleizaUig6XHYbr1z//sE3cLiJlk1lVru2FEaDod5xdVLK/db7A0DdINu5hRArhBCvCyEuHmxnQoirrO1WtLbquVyPZtKWghC2Q2ypKUaiVbOZbezS2UejwCEtBSHEM8CYAVZ9J/eDlFIKIQYbaTJJSrlXCDEFeE4IsVZKub3vRlLK24DbABYvXqxHrRzFmNYkLFK7j45KUpVTqRf/ZE1UV0wdaQ4pClLKswdbJ4RoFkKMlVLuF0KMBVoG2cde63WHEOJ5YAHQTxQ0mjQyYylo99HRiOGrAcCMdACTBt8wEQW7S8eehpGh3nGPAJ+x3n8G+FffDYQQFUIIl/W+GjgF2DDE42qKnFR6ukZDi8LRiM1fBYCMtA2+Ufc+uGkeLPv6CLXq6GCod9z/AucIIbYCZ1ufEUIsFkLcbm0zC1ghhFgNLAf+V0r53opCqBVuXgIbH31PD6N578hmH2lROBqx+5QoEOmX4a6QEh7+AoSaYcWd0Lx+4O00R8yQ7jgpZbuU8iwp5XQp5dlSyg5r+Qop5X9Y71+VUh4rpZxvvd4xHA0fFNOEf14NbZth02Pv6aE07x0ypUXhaMZZqtxHRnQQUdjzJux8Ec74Fjj98NrvRrB1xU3x3XEdO9QFA2B3jm5bNO8aabmPdEzh6MRhuY/s0Y6BN1hxJzhL4KRrYfzxcGDNCLauuCm+O656Glz7FlQfoyYH1xQkmZiCFoWjEuG1RCHWqe7j534MqYRameiB9Q/DvI+Dyw+1s6BtC5h6TMNwUJx3XEkdeCqgp2u0W6J5l5jSshR0oPnoxOEmghtHvAvWPgAv/hyaVqh1nY2QisGkk9XnmhmQjELXrtFq7fARDUAsOKpNKN47zlOhLYVCxrSGqejBa0ct3ZTginfB3retBXvVa9du9VpuparWzFKvLZtGtH3DSstGCLfD/Z+Cf31pVJtSvKLgLteWQgFjZmIKOv/8aCVolOBOBLKiEFAztdFpWQTlquz2cx2VAGxc8xaPrN430s0cGh07IBmHPy2F534EB9bBgbWH/t57SPGKgqcCol2j3QrNYKx9AN7566CrzZSOKRztBI0ySnr2qHgBKFEItSg3kd0N/lpWNHbwH/dtos2oZt/a5Vx378rRbfSREAvB706Cp/4bejpUgkxPh7KERjE+Urx3nKccYt2QSo52S45eYiG4+yOw563+6174GSy/YdCvSqlTUo92IrZSGlQxBCQCdiyHX86A1fcpK0EIvvXQWkwJ98Tfx1m2d7jKVkBjkzobVSxk1T3qc4s11sJMZq2iUaB47zhPhXqNBka3HcPBCz9XOdlDZcfzsOUpNfDnvaZ1M2x7GrY/C8/+oPe6eFj1/rr3KlP5wLp+X88UxNOB5qOWiL0cgKD0cKB8IbRvA2lCpA3KJxFNpNjaEuKsmbX8OvlR3jan80HbG6Pb6COhs1G9xkODrxsFiveOc5er10INNnfsUAPxerpg+Y/h8W/C9udg36p3t79EFO77FPztY3Dvpe+NBbXjebjzPNjwL7hlCTzxbbW88aWsXxgsn6klTHddCH98vxIRyAiW1FVSj3pKUQ/LP6U+wE4xvte6+7cJ/vJaIwDnzR1DTYmbPbKGMsLEkyNcWbV7H8QjR/69gz34tSi8B2Qsha5Rbca7omsP/HYxbPxX9mHasgHu/rDKTng3bHsa4kE49mOw5Ql44ApoPki1kZZNSpQOhpTZ3PED6+CBK2H3a/DoV9Wy4D6Y+SGVQbRpWfZ7GWETyoeaiqmMizf/CD8oh2h3JtCMoQPNRysrys9jndnA7ckPsqVHzdYWlB4AtiequGGZyjYaX+Hl959cSF3tGMpFiK6e+Mg1MhmD35+iUmaPlNwHf+VU9eouA8MBnTuHpXnvhqIXBdmxA5l478vvJlPvondyYB2s+lv/5c3rQaagbauVmy3AGsxDPPzuGrjuIbWPi2+FM74N256Fuy5QFkS/dq2F352grIrBAl7JONzzMfjD++D1W+HWU9QNUjpOmfc1s8Cww8LPQNVUaM1JF9y/Cny1MGau+nzC1dD0VrawWfCAthQ07Co/gQ/Fb6AbH2tDfgDuMs/jhdQ8XjLnZbYbV+5hcUMlVdV1lBKhKxwbuUY2vqQ6Nq3vIh22sxHq5oKvBuZfqjpPlVOhfIK2FIabZMrkE3/ZCIB46PP880cf5/+e2fKu9vXq9jb2dh1cVH7+5CZmf+9JWoIDPGAtrn9wDT9/MufC2b4cbj9L1Wl6/dbeMYP2reo10ARNb6oRm198GU68RsVI0r3zg/DillYSuUK143k45nyw2eGMb8Klf1MP7w3Zwra72sNcc8/bxPZbFsS2Z9TI0b7Ew8T/foWyPlo2wFPfgYknw3XvwKLPApA69avwjR1wzLlQO4vg7jXsaLV8pwfWwtj5sOgKOOGLcOp/ATkWQbQrKwo6pnDUks5GnlNfyvrURJLSoGLhR/h+2Y844JmW2aauzAWA3VeJISTdXYOUxhgCsWSKx9bsR/aNx21+Qr127ea5Tc28vqN94B3kfM80JXe/vguzYyexssl8sfKPPFP1SdVJGjMXKiZDh7YUhpWWYIytQUfm8wfFK/ztubfZ1qIeSq9sa+OmZ7YO+n0pJX97Yzf7Az1c/sc3OOV/nyMQSRCMZh/G8aRJRzjO8k0t3LJ8O/Gkyab9wV77+OnjG9mwrxuA+97awy3Lt9P45M3s+uePlKvEUwnjFsET31S99vSgnDarbd17laUw/ngorYe6OcqCCOzJHKepM8IDb/fOVFi9q50X7vo+T75t7ScRVb2ZyobsRpNPV72SFXdmFl1zz0qWrT3Ats0q8CuFTbmDclnzD/jtIuxblnGH90qoaFDZEmd8E/w1cPyV7Jv3JZY85OEf69S5t/um4gvv4W8vb1KxjLYtSuiO/w84/0Y1An3iidlj9HRmRzTr7KOjls6Iut8+c3ID11x6Eb9e/AwXnn8+y79+Bp8+qQGAGr8Ll11Zk84SNV4h3HWQctuoh/KvntpMU2fvOMCVf36L/7zvHQACkUS2EwP8fUUTX/rbSlbu7sp+QUrligXo2s2Kh39L992fJPLm3UT+/Q2Cf75ErVt9P/KXM3hz8y4SKZNVTV18959rkF27+NcuJ09sjfDw6mb49L/gvBvVPfGJu9/Nv2xYGOoczXnJ/kCUbryZz06R4lL7i/zo0an8+bPH88unNvPOni6+cPoUNThmw79Ur9XqmqxpCvDth9dy+QkTM/t4/y+fZ+bYEi6YV09rMIYE7n59F1csKOd84w0eN5fQ2B7mpFQVNz2zlQ/MGcMfXtgBEiZX+zL7SbzyO8aKdvCXwtQz4azvwePfgE2PquBy+UTMtq0YgLlnBUasS/Wqgc3xamaA6kVUTgHgnF+9SE8ixTmz6tjb1cPs+lKa1jzH/zj+yrKNE2DJ9RA6oA7uz5lAzzCUybr8JxBuR3orWW8JWNfeLbTIcg44JjJvb5+872d/CK5Srotew7LOqXzq8jNwNi4nNfE0dTF5K/l6+4W0x9r51kNrqS1109FVw4eFJHZgI3SWQyoONTN773fhp7MC1NOJtFVk26k5KukMq9jA+HIPJ0+rhvn1mXVTatQ9VV/uySzzlCoXazTYRiyZYn9XlImVXow+caktLUF+89w2DEPwlbOPAVTn6tlNLThsgh9eNJcbn9zEI6v28ca3z8LnsrN8k5o/bN3eAIsmWddm8IDqoJVPhK7dXCP/iIMkrmU5HalUAp7/KSLUzE133UtTxQl86oRJnGhsxGYmeCuk2hzoSRAUfhzCwF09fRj/i0dOUd5xBwJRktjplH7uTp5NsGIOl1Zv54Utrfzw0Q2s3N2FlCjL4en/gUe/AvveUT3qzkbeevUZvER53roQ7nD8nM/F/sIr29q5/qG1/PLpLTTu3U9JaCeTN/2B3ztv4nhHI41tEVbu6uTm5dv45dMqm2ZPZ4R9AeV+8hJlqtiHX0Qh3MKzwQlEvWN4ffrXAAg17wAg1aK+a8S6AFgZq2fl7k4+87A1sZ3lb2zpjmYmNv/Di9tZ+puX2NIcJLZL1YgR7dvU9sFm9VoyFoBwLEl3NAFTrcnTdz7PmqYAc8UOvm//M5Xh7eyStbwWbUAeWKtiBaDiCN1NxGZcwKPBqZgSNpSdxl9rvsLJNy4nlkzx5s4OXt3ezn+eNZ3pdSVc/de3+dNWNwDOji3Qqtx61M5kbVOAP72yk51tYTjucv71gVcAaGs9wMMrlTWkLYWjl46IEoUqv6vfuinVKsYwLkcUfGXVAESDHVz915Wc8YvnOetXL6hrPYctzcoC2Li/O7MsPRI6kZI8vaGZt3Z2EIoleXzdAaKJFK9uV9bH+n05Ke7pcQXHnA+AX0T5NZ9itTk1s0n8jTsyQeP3+3ezqz3Cfa9v50f2P7FP1PHv1ElU+Zw0dUa47I+v88NHR3/+saK84/ZbD+EFsT/wP8nPImtnMzaxm/PmjOFPrzRmttu7bR3mqnsBCL5yG/zvBLhpPv+x8UrecV3FlOBb2Elyhn0NV7mfxSuyMYPz9vya51xf56TA4wBc7nmDxvYwm5uVC+mlreoi2tPRwz4rJvGJ8Z0YOdNY37SpjFNvfI5PPdBEUho8+uLrRLrbcUTbaZOlme3ua/Tz9X+sppkKYtKBtPyND6zMuo2eswTs5a1tlHYo948/bJ1r2lIoqVNt/ePrzPv+U3SUzSblLIV1DxF8+qfc5/wxV9ifYpa5ld2ylndSUxBmgs7nboJIh+oVSZN7t2SDv+v2dfPGjnZagjHWNgX44aPrGVvm5ounK6vs+IZKnDXT6BEejou+SeKAJQrVM/jJsg384N8bOPMXz/OV+95hbZvElILn3tnM8o2qzVKLwlHLjy6ay5z60l6WdprJlqUwriIrCi7LffTsyk08t6mFjy8ez862MLe9sKPXd7ccUPfoRsvd++dXdvK75dtZOLGcceUe7n1zN9ss19E/Vuzh9R3tRBMmJS476/ZmhSSdvffr3VMyi+acvJRPyh/xhfhXADDfvouozc92cywfqzuAwybwdm5imrGPn8U+ShQXJ02toqmzh/X7ulnbNPrjqoryjjsQSD+8BSBwj52FCO7ntx+ZwudPm8xlSybgtBmw+h5SJrTJUko23IuUkk3H/4QvxL9CWPj4hG05k41mbDKFIxnm6+M2IjBxE2N6TPUSKkSQblsFZ6VeYk9bIHOhpayCbrs7IhlRuG62yhzaLyuJSTulDQs4cUoVV585g7hvLOWhHey9/ZMAPJtaCMBeWcXj2yLsaA0ztbaUPbKGaIua3vrNnR1U+9WcEZusC/1fq/cxPamC6vWJJpat3U+k3RIPy3202rrwzvr1y7wYPwY2Pcqpu29lq3M2HaIcgBZ7PaHq+ZhSUPHqT9j3yA8x25UYPdqkem4Om2D93gCbrWP/8NENrNvbzfXnz8TjtFFX6uauzy3hgS+9j73TP8UHjTdIrb4fyiaStHtZvSfAxcfV8+EF4/jnqn2sagrSjZdIoA1hjWOo8PXvJWqODk6ZVs1j152G097/MeV32fntZQv49EnZ+ZuFlXHol2EWTargxo/O44L59fzxpR38/a09NHVGuPDml3lmo7Kcd3dEaA3G+MmyjcwaW8Ifp77CHf7fE929Eilh4cRy3tjZwfObW7EZgo8uGs/WliCxpJWR17KBsLOaPzWq44ali4ZZi/nhh+cz4ZgFALjbN7A2UU+geiGl7as4ptav3MfANlmP3RAc31BJ0pRICY1t4f7B7BGmKEVhf3e2R1/udeAco6ooOjp38J261/mp+26m1vqpaXuDdUxlh189gF9KzeULG+aw0ncaHWNP4xRjHUt8lsvG6eezqQdYO+GX3Of8ETUiQEi6WWs28NSU6ylNdXJh4B427AtgkM36CfQk2HQgiBBQ1rke6R/DrbbLuT21lKvPmsXNly/ka+fOwFs7hfNsbzG9+zVu5LM8mDoNgM3mBIJRNdDsc6dMZrusx2zZiJSS1Xu6OHNGLa6cm6ZxTxOTjBbihoeJooUv3/MWK9ZtVOmh3qpewfLOSILfxZayf8olfCD+M547/lbe8apyxGbZJP761Y/Qeem/WcUMbDuepb1JZU/tlnV4nTaWTK7k7V2dyv2DisVMqfFxwbys7zdN8sQvE8SDu2sbVE9n04EgPYkUZ86s5eIF4wB4e3cnAemjXIS4YJ6yaiZVlbzby0BT5Fwwv57xFdnYYXrAahlhLjjGi3j2h/zM+UcWjC/lGw+u4RsPrGFNU4BNB4KUuFU49d43d5NISb70vglUvX0TM9ue4g7nL2kQ+/nGMfsBeHBlE9Nr/SxuqCCRkizf1ApA6sB6VsXq6cZHt/SwVk6hvtLPRxaO55qLz8w0q1FMZPaSsyDSzvuqw9QJNaC2WVYyrsLDpKrsOQRjSa699x2+9vfV7+W/7qAUpSgcCETxOZWLo77MoybcATVF58u/hrfvokSGmCd2EJ9wKrOOPxuAVaVnsKs9widPmIg55UwqRYiLbcrPzcf/ggjswd/6DscZO/CLKD9IfpoL4jcQnnweO8ZdxJeMh6ne9xzr3VdyirGWKp/qxb+xo4M6vwtjz+uIcQvZMe5CbjE+yeKGimyjrTLALaKK30fPxl09AYBGQwW7K31OLjyunvWyAW+wkb3NrXRGEhw3sTxjQteWuJhjNAIQm3Y+DpHiHucNNLS/BP46OnuSGfP0m+fN5JbLF7KCmVwV+CybzfGcOq2aTdXnYkpBT+VsAKpmncbWqvdTF99NfNuLRKWDiLOSGWNKOGVaNVtbQiRNSblXZXtdcXJDv8AewKTx47kw/hNemfQl9i/8SiZjauHECmbUqQe/lBAUfqoJcHHUSpV1+d/lVaA56nB4iEkHZSLMh7v+DC//Cs/ae7hrqZsqn5NXt2fTRZfOVfG1v76+C0PA8WKTKjcx/3LGiA4ecf+AE167BjcxUtEQP+ZmPrjsZM6qDfKD+54ncvNpiJb1rE9N4ANzxnBz8mL+LD9EpXXPV5SV0ibVgLtE1QzcDScAcIpnJ2NEB0lstFHKhApvb2EDlq3dTzSpC+INKwcCURZMVA/ccRUelTZpc8Laf6i0z1SM/564DrswmXfahyhZ/AlY8gU+/4X/4oYPH8vnT5tCxdxzATg++iqUTYRpZ8HH/4I8738zx9nMZEBlQBgf+DEmgp85bsNDjLONlZwzU80zu2F/N4tK2lV1x2ln8dVzjuEXH5ufSaUDMmWAzWnn4rTZ+NBpS7g7eTY9sy7BZghOnFKJ32Wn1T8LgWTXepXhMH98eeai+sLpU/nuEvVA9i/4CAAnGhuZmGwk5atj6W9e4qq71Qjp8+eO4YPzxjKnvpS1ewOMK/ewYGIFkfqTWBT7PcaYOZmmiWlnqf/lvidpopZ/XH0qP79kPh9ZMD4z4PjL75/OwonlfGRh73IEaTxOG86aqfwmfgEffyzJn19txGETjK/wUFfqotTquZVW1nKqbT1jdv0bTr5OjX/QaA4HIQgbfsoIUdr8BoyZBwhcO57hipMbqKGTV6tvYKq9hQvmVvHX8tuYEn6H2fWl+BqfUZVXz7sB6S6jVHYjUjEurGjkMtuzLO56EhHr5pbp7/Alx6O42tax1TGTFd5T+fRJDdyWuoDNZadmSr0LIWizK3dt2aR5KgXb4WOu3EK90UWPqxqJwYRKL+NzOnWgOkfvm149Kv9CKMKU1JQpae6OcsF8lbEzqdKrBmxVTlW1gyzm7fsH2Jx4ppwMDg8s/Rke4PITlLp7x0zgVd/ZnBx+hkydnpkfRACbnr6TKcnteMfNgd0h6svdNNTXERx3ClX7XgLg8srN2HddxvGOqdTQxSQrvY5p57CgooIFfRteoSyFMYsvZu0nzsFpM/hd+EYunF/PhFldzBqjetP1s06Cd2DTypdx2t/PzORGrg7fyotcwrRaPzM79oC3CjH5dCibSCgJ/vButnWa7LdiLU67uhgB3j+zju0tYW779CKcdoMxZR46Ke2V6jd19iLWvtbAsUYjCUcJs8Zmg+CnTq/hte1t/H8nTuLKUycf9Lc5/9ix/OZZNXbi7Fm1nD2rLnMTzRhTwluNnXhKq6ET5e468zs6JVVzRJRX1nCJL4XYvQHO/G+wOWDrU1z5ma+xsOsJ6teu44lzOnAEHoXo85Q7dvHm2Omw6l6YciZ4KhAnXA173oBdr7LUs5FoaCexkkm4Ji7Cve5vXCpiPJQ4lf8X/SJXnzGVufXqmVFf7u7VlqB7LIQ3M2XO8WDYYNxCyttXc/HUEqKRcRCAiZVe3A4b02r9nDWzljte3knSlJw6vWY0/n1AEYpCeyhG0pSMK3dz/1UnZbMTzrgeXv4VlI6HzY8pV1LDaUoQBkAIwcnX3g7/Nx8Wf67XusdqriS2dx3zG2p5fXdIuaiAkkUfg30vQclYXN2NAHzUto8kNuyxFFTPyDz8+zHrAmW+Tj8Hl6EsiC+dqUZtph/gAJ877wRa36mkonsDV5/+eeyrbuKk9oeZIN7HrO5X1QxOtbPBXQr/tZbg+pfw/+NDlPTs5rTp1by+o52pNX5sVhf/y++fxhUnN2TM3voydWHnmrRzxpVzuvgeX0nehX3K2czKafb3L5jNlubggMHAvnxonhIFn9PGby5bgNeZvfyOqVOi4C61ekjVM8DhHmRPGs3AGN4KjN1WdYCJJ6qqqs//FG/3Tk7xKpelY+sTakyQu4y50Z3M2fh58NepQWMAZ35Lvf7lIha3rSRhb8Pe8AFY8h+w8RFsE07EMfW73OCq40Pzx1LqdjB7bCmzczpLAMGxJ7F6+wHmTrGyk8Yvhld/iyitxzXmOK4Y18DSY5U18e9rT8VhEzy9oRlE71TbkaboRKHC5+SJr5xGlc9FTUlO5sqci9UfwM+nQbhVicLB8FTANxv79VYnHf8hVtSczBeWTKSmxEWF9UDl2EvUGIJxC1XhuilnwClfwV45BVbfq0zIwXD61AjfQ+Bz2aFhMR9s34Tr7OnwezUC865JT1H7qEqPZclVme3HzDqFV3znsmPsefzh44v42xu7M0E2AIfNyAgCwGnTa/jxxXM5cUpltml2g7uuOYdE6ixmjel94U+p8TOl5vD8/sfUlXB8QwVz6st6CQLA+XPHsq+rB1+5JQrpukgazZGQLoRp2FW1gJoZ8NrNqq5WugZa05vq9bOPw1P/jSgbDx+4Acr6uD5nXYD/MTWGiEknwoQl8J1mhM3OxX0O+9A1J2PvE0t732XfIJb8eqYDxoQTwPw1dO3GmLGU75+fddF6rBjoN8+f2StxZDQQo53+NBiLFy+WK1aseG92/qelsOsV+OwTMOmk4d9/MgYPXqlq+oxbNPz7f+t2eOxr8Pnn4PazVW/I7oGkddF/6Nf9rJuC4envwis3wenfhDO/Pdqt0RQajS/D23dBzTHwvv+nlr3xB1U1AJQbuWO7ssw/MfjMf4Aajfz7U5RX4epXVZmZoZCIwg31qlTN2T+AU78ytP0NghDibSnl4nf7/aKzFA6LurmqKNt78cAGsLsOfcENhRlLlSgsv0EJAihBMBxgJqwAW4GSHj1dNW1026EpTBpOVX+5LL4S3rlb3fOnXKeqEJ907aH3ZXPAh3+v4g01B7HyDxeHGxpOUcUvnf0H5OULR6el0NOp5nqtmfHe7H8kuO0MVZoDoGyCGm184jVq/oJJJ2dLTBYakQ7Vs3vf19VNqdEMB3vfhkeug0/+QxWXHC2aVqjqyNe8AbUzD739u2ColsLRKQrFwJan4PVbVLptLAjrHoQP/0EVudNoNEct2n10tHLMueoPYPlP1Wshu400Gk1eoEWhGJh/qQpe9S1HrdFoNEfIkHKfhBAfE0KsF0KYQohBzRUhxHlCiM1CiG1CiOuHckzNAFROhvf/tx7opdFohsxQnyLrgI8ALw62gVCT7N4CnA/MBi4TQswe4nE1Go1G8x4wJPeRlHIjkClVMAhLgG1Syh3WtvcBFwGjP5uERqPRaHoxEv6GccCenM9N1rJ+CCGuEkKsEEKsaG1tHYGmaTQajSaXQ1oKQohngDEDrPqOlPJfw9kYKeVtwG2gUlKHc98ajUajOTSHFAUp5dlDPMZeYELO5/HWMo1Go9HkGSPhPnoLmC6EmCyEcAKXAo+MwHE1Go1Gc4QMNSX1w0KIJuAk4DEhxJPW8nohxDIAKWUSuBZ4EtgI/F1KuX5ozdZoNBrNe8FQs48eBh4eYPk+YGnO52XAsqEcS6PRaDTvPXlb+0gI0QrsGsIuqoG2YWpOvqDPqTAoxnOC4jyvYjynGVLKknf75bwtcyGlHNJ8dEKIFUMpCpWP6HMqDIrxnKA4z6tYz2ko39d1ETQajUaTQYuCRqPRaDIUsyjcNtoNeA/Q51QYFOM5QXGelz6nPuRtoFmj0Wg0I08xWwoajUajOUK0KGg0Go0mQ9GJQrFM6COEaBRCrBVCrEqnmAkhKoUQTwshtlqvFaPdzkMhhLhTCNEihFiXs2zA8xCK31i/3RohxMLRa/ngDHJO3xdC7LV+r1VCiKU5675lndNmIcQHRqfVB0cIMUEIsVwIscGaOOs/reUF+1sd5JwK9rcSQriFEG8KIVZb5/QDa/lkIcQbVtvvt0oKIYRwWZ+3WesbDnkQKWXR/AE2YDswBXACq4HZo92ud3kujUB1n2U/A6633l8P3Dja7TyM83gfsBBYd6jzQI2CfxwQwInAG6Pd/iM4p+8DXx9g29nWdegCJlvXp220z2GAdo4FFlrvS4AtVtsL9rc6yDkV7G9l/b/91nsH8Ib1//87cKm1/Fbgauv9NcCt1vtLgfsPdYxisxQyE/pIKeNAekKfYuEi4C7r/V3AxaPXlMNDSvki0NFn8WDncRHwF6l4HSgXQowdkYYeAYOc02BcBNwnpYxJKXcC21DXaV4hpdwvpVxpvQ+i6pSNo4B/q4Oc02Dk/W9l/b9D1keH9SeB9wMPWMv7/k7p3+8B4CxxiFnRik0UDntCnwJAAk8JId4WQlxlLauTUu633h8A6kanaUNmsPMo9N/vWsuVcmeOa6/gzslyMSxA9UKL4rfqc05QwL+VEMImhFgFtABPoyyaLqmKj0LvdmfOyVofAKoOtv9iE4Vi4lQp5ULU3NZfEkK8L3elVPZgwecTF8t5AL8HpgLHAfuBX45qa94lQgg/8CDwFSlld+66Qv2tBjingv6tpJQpKeVxqLlplgAzh3P/xSYKRTOhj5Ryr/XagqpEuwRoTpvo1mvL6LVwSAx2HgX7+0kpm62b1QT+SNbtUDDnJIRwoB6e90gpH7IWF/RvNdA5FcNvBSCl7AKWo6YuKBdCpGvZ5bY7c07W+jKg/WD7LTZRKIoJfYQQPiFESfo9cC6wDnUun7E2+wwwrNOhjiCDnccjwKetzJYTgUCO6yKv6eNP/zDq9wJ1TpdaWSCTgenAmyPdvkNh+ZnvADZKKX+Vs6pgf6vBzqmQfyshRI0Qotx67wHOQcVKlgOXWJv1/Z3Sv98lwHOWxTc4ox1Nfw+i80tRWQbbUfNIj3qb3sU5TEFlQawG1qfPA+ULfBbYCjwDVI52Ww/jXO5FmegJlK/zysHOA5VZcYv1260FFo92+4/gnO622rzGuhHH5mz/HeucNgPnj3b7BzmnU1GuoTXAKutvaSH/Vgc5p4L9rYB5wDtW29cB37WWT0EJ2DbgH4DLWu62Pm+z1k851DF0mQuNRqPRZCg295FGo9FohoAWBY1Go9Fk0KKg0Wg0mgxaFDQajUaTQYuCRqPRaDJoUdBoNBpNBi0KGo1Go8nw/wNyXwoHCSbHhwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "ename": "SystemExit",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "An exception has occurred, use %tb to see the full traceback.\n",
      "\u001b[0;31mSystemExit\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "# param_dict= paddle.load('model.pdparams')   #读取保存的参数\n",
    "param_dict= paddle.load('model')   #读取保存的参数\n",
    "model = AutoEncoder()    \n",
    "model.load_dict(param_dict)    #加载参数\n",
    "model.eval()   #预测\n",
    "data_reader = paddle.io.DataLoader(train_dataset,\n",
    "                        places=[paddle.CPUPlace()],\n",
    "                        batch_size=128,\n",
    "                        shuffle=False,\n",
    "                        drop_last=False,\n",
    "                        num_workers=0)\n",
    "for batch_id, data in enumerate(data_reader()):\n",
    "    x = data[0]\n",
    "    out = model(x)\n",
    "    step = np.arange(287)\n",
    "    plt.plot(step,x[0,0,:-1].numpy())\n",
    "    plt.plot(step,out[0,0].numpy())\n",
    "    plt.show()\n",
    "    sys.exit()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 可以看出对正常数据的重构效果十分不错\n",
    "* 接下来我们对异常数据进行探测\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_test_value = (df_daily_jumpsup - training_mean) / training_std\n",
    "fig, ax = plt.subplots()\n",
    "df_test_value.plot(legend=False, ax=ax)\n",
    "plt.show()\n",
    "#这是测试集里面的异常数据，可以看到第11~~12天发生了异常"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "141\n",
      "[2990, 2991, 2992, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131]\n"
     ]
    }
   ],
   "source": [
    "#探测异常数据\n",
    "threshold = 0.033    #阀值设定，即刚才求得的值\n",
    "# param_dict = paddle.load('model.pdparams')   #读取保存的参数\n",
    "param_dict = paddle.load('model')   #读取保存的参数\n",
    "model = AutoEncoder()    \n",
    "model.load_dict(param_dict)    #加载参数\n",
    "model.eval()   #预测\n",
    "mse_loss = paddle.nn.loss.MSELoss()\n",
    "\n",
    "def create_sequences(values, time_steps=288):\n",
    "    '''\n",
    "    探测数据预处理\n",
    "    '''\n",
    "    output = []\n",
    "    for i in range(len(values) - time_steps):\n",
    "        output.append(values[i : (i + time_steps)])\n",
    "    return np.stack(output)\n",
    "\n",
    "\n",
    "x_test = create_sequences(df_test_value.values)\n",
    "x = paddle.to_tensor(x_test).astype('float32')\n",
    "\n",
    "abnormal_index = [] #记录检测到异常时数据的索引\n",
    "\n",
    "for i in range(len(x_test)):\n",
    "    input_x = paddle.reshape(x[i],(1,1,288))\n",
    "    out = model(input_x)\n",
    "    loss = mse_loss(input_x[:,:,:-1],out)\n",
    "    if loss.numpy()[0]>threshold:\n",
    "        #开始检测到异常时序列末端靠近异常点，所以我们要加上序列长度，得到真实索引位置\n",
    "        abnormal_index.append(i+288)\n",
    "\n",
    "#不再检测异常时序列的前端靠近异常点，所以我们要减去索引长度得到异常点真实索引，为了结果明显，我们给异常位置加宽40单位\n",
    "abnormal_index = abnormal_index[:(-288+40)]\n",
    "print(len(abnormal_index))\n",
    "print(abnormal_index)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#异常检测结果可视化\n",
    "df_subset = df_daily_jumpsup.iloc[abnormal_index]\n",
    "fig, ax = plt.subplots()\n",
    "df_daily_jumpsup.plot(legend=False, ax=ax)\n",
    "df_subset.plot(legend=False, ax=ax, color=\"r\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
